单件模式与业务逻辑服务层封装

        目前,软件分层的思想已经得到普及,在我所做过的项目中也得到了很好的效果。但是也有明显的缺点,应付从下而上的变化时,往往需要级连修改,尤其是数据库结构发生变化,另外如果采用了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这样的框架,这样做就没必要了。

posted on 2006-05-24 15:16  快乐尘埃  阅读(684)  评论(0编辑  收藏  举报