风讯dotNETCMS源码分析—数据存取篇

        前几天突然对CMS感兴趣,就去下载了风讯dotNETCMS源码。当前版本是dotnetcms1.0 sp5免费版,风讯的官方主页上可以下载。

        用Visual Studio 2008打开后,初步分析了它的数据存取技术。风讯dotNETCMS采取的是基于抽象工厂模式的三层架构。
        Foosun.Model是数据实体层,用于在各层之间传递数据,Foosun.Web是表示层,Foosun.CMS是业务逻辑层,数据访问层有多个:Foosun.AccessDAL、Foosun.SQLServerDAL,分别用于支持Access、SQL Server数据库。
        具体支持哪种数据库,只需在表示层的Web.config文件中进行配置,配置字符串如下:
        <appSettings>
            <add key="WebDAL" value="Foosun.SQLServerDAL"/>
        </appSettings>
       Foosun.DALFactory是接口层,定义了Foosun.AccessDAL、Foosun.SQLServerDAL都要实现的接口,如public interface IAdmin,示意图

如下:

 

       Foosun.DALFactory接口层同时还包含实现抽象工厂模式的类DataAccess。在DataAccess类中创建对象通过配置文件和反射技术来实现。通过配置文件(即上面提到的Web.config)的程序集名,决定加载具体的哪个DAL的程序集,并通过动态组合类名来动态创建DAL对象,并返回接口对象。

DataAccess类图如下:

       示例代码如下:
        public static IAdmin CreateAdmin()
        {
                    string className = path + ".Admin";  //类名
                    return (IAdmin)Assembly.Load(path).CreateInstance(className);//反射,并进行类型转换。
        }
      而path的定义如下:
       private static readonly string path =Foosun.Config.UIConfig.WebDAL;
      Foosun.Config.UIConfig.WebDAL的定义如下:
       public static string WebDAL = ConfigurationManager.AppSettings["WebDAL"];的确是读取了Web.config文件中的WebDAL配置。
      事实上,微软的PetShop的数据访问也是采用了基于抽象工厂模式的三层架构。通过使用基于抽象工厂模式的三层架构,很好的实现了系统的重用性、灵活性和扩展性。

posted @ 2011-01-25 20:45  zhouhb  阅读(4149)  评论(25编辑  收藏  举报