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