目录
目录X

动易SiteFactory新特性体验之旅——支持多数据库

  动易CMS 2007的新特性中有这样一个非常重要的特性:

以下是引用片段:
支持多数据库
动易CMS 2007采用了抽象工厂模式将各个不同数据库的实现方式分离,理论上可以支持任意的数据库,目前测试的版本只支持MS SQL 2000/2005。
不同数据库的实现分离,就不用象原动易CMS 2006版那样为了兼容AC和SQL两种数据库,必须使用标准SQL语句,并要注意两种数据库语句中的细小差异。分离后,各数据库实现独立出来,就可以灵活的利用各数据库的优点(如:AC中可以使用SQL语句,而SQL中就可以灵活使用存储过程、自定义函数、触发器等特性),并且互相之间没有干扰,可通过配置文件来实现快速切换。

  这个新特性,我在上篇讲N层架构设计的文章中已经附带了讲了一下。今天我们再来详细的讲一讲,动易是如何实现这个特性的。

  实现这个特性的前提是系统采用分层架构设计,然后在数据访问层采用数据库抽象工厂模式,将不同数据库的实现抽象出来,然后通过修改配置文件,即可在不同数据库类型间切换。

  可能有些人迷糊了:动易CMS2006不也支持ACCESS和SQL两种数据库吗?还有其他的系统不也是这样吗?这怎么能称得上是动易CMS 2007的新特性呢?呵呵,大家别急,且听我慢慢讲来。

  动易CMS2006是支持ACCESS和SQL两种数据库,并且也是简单的修改Conn.asp中的数据库类型即可在ACCESS和SQL中切换。但是动易CMS2006的多数据库实现方式与动易CMS2007是完全不同的。

  我们先来看看动易CMS2006的多数据库实现方式。我们来看一段动易CMS2006的源代码:

If SystemDatabaseType = "SQL" Then
Conn.Execute ("alter table PE_Admin add AdminPurview_" & rsChannel("ChannelDir") & " Int null")
Else
Conn.Execute ("alter table PE_Admin add COLUMN AdminPurview_" & rsChannel("ChannelDir") & " INTEGER")
End If

  因为ACCESS和SQL在语法上稍微有些区别,并不能完全通用,所以在写程序时就要特别注意两者的区别,一不小心,就会出现错误。而且这种方式,在写代码时,要考虑到每一种数据库的不同语法之处。每增加一种数据库,就要重新修改几千处查询语句,工作量可想而知,而且在修改时极易出错。

  动易CMS2007则采用了全新的模式——数据库抽象工厂模式。在数据访问层(DAL)中,采用DAL Interface抽象出数据访问逻辑,并以DAL Factory作为数据访问层对象的工厂模块。对于DAL Interface而言,分别有支持MS-SQL的SQL Server DAL和支持Oracle的Oracle DAL具体实现。而Model模块则包含了数据实体对象。其详细的模块结构图如下所示:

图片点击可在新窗口打开查看
数据访问层的模块结构图

  在数据访问层中,完全采用了“面向接口编程”思想。抽象出来的IDAL模块,脱离了与具体数据库的依赖,从而使得整个数据访问层利于数据库迁移。DALFactory模块专门管理DAL对象的创建,便于业务逻辑层访问。SQLServerDAL和OracleDAL模块均实现IDAL模块的接口,其中包含的逻辑就是对数据库的Select,Insert,Update和Delete操作。因为数据库类型的不同,对数据库的操作也有所不同,代码也会因此有所区别。

  此外,抽象出来的IDAL模块,除了解除了向下的依赖之外,对于其上的业务逻辑层,同样仅存在弱依赖关系,如下图所示:

图片点击可在新窗口打开查看
业务逻辑层的模块结构图

  上图中BLL是业务逻辑层的核心模块,它包含了整个系统的核心业务。在业务逻辑层中,不能直接访问数据库,而必须通过数据访问层。注意图中对数据访问业务的调用,是通过接口模块IDAL来完成的。既然与具体的数据访问逻辑无关,则层与层之间的关系就是松散耦合的。如果此时需要修改数据访问层的具体实现,只要不涉及到IDAL的接口定义,那么业务逻辑层就不会受到任何影响。毕竟,具体实现的SQLServerDAL和OracalDAL根本就与业务逻辑层没有半点关系。

  上述的三个模块分别使用了三个独立的项目来进行管理,编译后就生成了三个相应的DLL,如下图所示:


图片点击可在新窗口打开查看

  注意,在测试版中,因为还没有提供对ACCESS和Oracle的数据库支持,所以在上图中我们没有看到对应的Powereasy.AccessDal.dll和PowerEasy.OracleDal.dll。

【打印正文】 发布时间:2007-08-20 09:45:04 浏览次数: 作者:webboy 来源:本站原创
×

用户登录