单件模式与业务逻辑服务层封装
目前,软件分层的思想已经得到普及,在我所做过的项目中也得到了很好的效果。但是也有明显的缺点,应付从下而上的变化时,往往需要级连修改,尤其是数据库结构发生变化,另外如果采用了NHibernate之类ORM平台,这方面好好一些。
在复杂的业务逻辑层,往往对象的粒度很小,在表现层使用起来不太方便,会产生重复代码(例如常规的初始化,数据访问数等),加大了表现层开发人员的学习难度和开发工作量。此时往往是为业务逻辑层增加服务层(包装层),减少重复代码和不必要的复杂度。
增加服务层的缺点也是明显的:减少了灵活性。
本例使用了服务层包装业务逻辑,简化了表现层开发。服务层包装类需要数据库连接参数等,为此将采用单件模式,使用静态属性进一步封装服务层对象,并考虑了多线程的情景。这种情况下,以后服务层接口的变更仅需要修改服务层包装类。
// 服务层包装类
public class MyUserService
{
public MyUserService(string strConn)
{
// ......
}
// ......
}
......
public class BusinewwWapper
{
private static MyUserService m_User;
private static string m_StrConn;
static BusinewwWapper()
{
// 必要的初始化
m_StrConn =......;
}
private static void SetUser()
{
lock(typeof(SmWFM))
{
if(m_User == null )
m_User = new MyUserService(m_StrConn );
}
}
public static MyUserService User
{
get
{
if(m_User == null )
SetUser();
return m_User;
}
}
// ......
}
其实,有了Spring.NET这样的框架,这样做就没必要了。