前几天突然对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的数据访问也是采用了基于抽象工厂模式的三层架构。通过使用基于抽象工厂模式的三层架构,很好的实现了系统的重用性、灵活性和扩展性。

转载于:https://www.cnblogs.com/zhouhb/archive/2011/01/25/1944913.html

风讯dotNETCMS源码分析—数据存取篇相关推荐

  1. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  2. Kubernetes Node Controller源码分析之配置篇

    2019独角兽企业重金招聘Python工程师标准>>> Author: xidianwangtao@gmail.com Kubernetes Node Controller源码分析之 ...

  3. 【VUE】源码分析 - 数据劫持的基本原理

    tips:本系列博客的代码部分(示例等除外),均出自vue源码内容,版本为2.6.14.但是为了增加易读性,会对不相关内容做选择性省略.如果大家想了解完整的源码,建议自行从官方下载.https://g ...

  4. 风讯dotNETCMS源码

    风讯DOTNETCMS源码 下载地址: http://down.qiannao.com/space/file/huwlnew/share/2011/5/24/-98ce-8bafDotNetCMS04 ...

  5. JUC源码分析-线程池篇(五):ForkJoinPool - 2

    通过上一篇(JUC源码分析-线程池篇(四):ForkJoinPool - 1)的讲解,相信同学们对 ForkJoinPool 已经有了一个大概的认识,本篇我们将通过分析源码的方式来深入了解 ForkJ ...

  6. photoshop-v.1.0.1源码分析第三篇–FilterInterface.p

    photoshop-v.1.0.1源码分析第三篇–FilterInterface.p 总体预览 一.源码预览 二.语法解释 三.结构预览 四:语句分析 五:思维导图 六:疑留问题 一.源码预览 {Ph ...

  7. v74.01 鸿蒙内核源码分析(编码方式篇) | 机器指令是如何编码的 | 百篇博客分析OpenHarmony源码

    Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...

  8. hadoop之MapReduce框架TaskTracker端心跳机制分析(源码分析第六篇)

    1.概述 MapReduce框架中的master/slave心跳机制是整个集群运作的基础,是沟通TaskTracker和JobTracker的桥梁.TaskTracker周期性地调用心跳RPC函数,汇 ...

  9. 鸿蒙内核分析,鸿蒙内核源码分析(中断概念篇) | 外人眼中权势滔天的当红海公公...

    关于中断部分系列篇将用三篇详细说明整个过程. ● 中断概念篇 中断概念很多,比如中断控制器,中断源,中断向量,中断共享,中断处理程序等等.本篇做一次整理.先了解透概念才好理解中断过程.本篇的主角是海公 ...

最新文章

  1. 罹患各种癌晚期,无法救治
  2. 怎么把mysql转换mssql_MySQL如何转SQL server
  3. pandas中drop用法_python进行数据清理之pandas中的drop用法
  4. Win8下在Vmware11中安装使用苹果系统OS X 10.10
  5. 在WORD中删除中文或英文
  6. C# 温故而知新:Stream篇(三)
  7. Flink Weekly | 每周社区动态更新-12/24
  8. 格力手机色界G0245D-Root-最简指南
  9. 疯狂代码 写给WEB2.0的站长
  10. Mobilenet-ssd 目标检测
  11. 【电子学会】2021年12月图形化四级 -- 棕熊大战
  12. 阿里香港轻量服务器加上BBR会发生什么?
  13. 敬业签桌面便签软件:该openid已被使用,无法绑定!(适用QQ微信互联登录解绑)
  14. Java程序在结构上的特点_下面关于JavaApplication程序结构特点描述中,错误的是()...
  15. HTTP 和 DNS 原理概念了解 ;
  16. 小技巧 - 如何将“比例比例”站上的视频下载到本地?
  17. C语言实验——用*号输出字母C的图案
  18. Vs —— 转移Qt项目后环境问题
  19. idea中Project JDK is not defind的其中之一解决办法
  20. P18~19~20~21-NPC、道具、背包、装备系统

热门文章

  1. HOMEBREW安装之后需要需要把他安装到路径之中
  2. 简单,为什么要复杂和妥协?
  3. 安装安卓SDK和JDK的简便方法
  4. Tech Websites
  5. Flex通用克隆(clone)方法
  6. grub2的配置文件grub.cfg详解
  7. CNCF推出云原生网络功能(CNF)Testbed
  8. Unity引擎与C#脚本简介
  9. 最新的Java SE平台和JDK版本发布计划
  10. 《Python数据科学指南》——1.23 采用键排序