实战 .Net 数据访问层 - 11

** 4. ** ** Data Access Logic **

讨论 Data Access Logic (为了不和 Data Access Layer 混淆,文中

所有涉及 Data Access Logic 的部分将全部使用全称描述, ** DAL ** ** 仅指 ** ** Data Access Layer ** )前,让我们先看一看它的结构示意图:

咦!怎么回事?看上去长得与 DAF 非常相似嘛!难道这就是作

者“不辞辛劳”单独开辟一个小节来进行“大肆宣传”的 Data Access

Logic 吗?

没错!这就是 Data Access Logic !它是和 DAF 长得有点像,但

绝对不是孪生兄弟,它所起的作用也和 DAF 完全不同!

首先需要声明的是, Data Access Logic 与 DAF 间的相似性确实

存在,但也就体现在如下两个方面(作者认为这并不是其主要特性):

(1) 它们都采用了 2 次继承模式;

(2) Data Access Logic 的前两层( DalBase / MyDal )作用大致相当于 DAF 中的前两层作用,分别在 Framework Level 和 Application Level 提供一些基础服务。

但是,除此之外,作者需要特别强调的是, Data Access Logic 的

关键特性并不在这前两层( DAF 则有点不同,它的前两层非常重要),

而是在真正实现了具体 Data Access Logic 的 ** 3 ** ** 层 ** 中!

打个简单比方: DAF 有点像 .NET 中的 Interface ,而 Data Access Logic 则更像 Implementation J 。

那么,作者为何不直接将 DAF 声明为 Interface 而令 Data Access Logic 直接继承之呢?到底是什么原因令我们必须将它们严格分开,并在不同的 Layer 中进行处理呢?

其实,原因在上面已经分析了一部分( DAF 需要确保接口声明一致,数据实体一致,而 Data Access Logic 则无此限制),另一部分原因则在于, DAF 对外需要统一公布所有接口,而 Data Access Logic 则可以相对灵活地进行不同处理。例如:可以将 ADO.NET 相关的数据访问操作集中在一个地方,而 XML 相关的处理放置则可以在另一个地方进行实现(是不是更有利于细化分工 J )!

还有两种情况可能也需要支持这种变化:

(1) 当前版本中,我们使用了某种方法实现 Data Access Logic ,例如: O/R Mapping ,可是在后续版本中,由于某些原因(性能 / 复杂度),我们需要改用 DataSet 方式进行交互,这时候,我们为 DataSet 撰写的新方法就可以非常方便的替换现有的 O/R Mapping 方法(只要修改一下配置信息),而对外接口( DAF )则根本不必修改(当然了,原来针对 O/R Mapping 返回数据进行处理的那些代码是必须要修改的,但这并不会破坏 Cross Layer 间的接口一致性)!

(2) 系统中可能会存在一些遗留 Data Access Logic 代码,这部分东东弃之可惜,食之则余香依旧,怎么办呢?很简单,交给 DAF 处理吧!我们可以单独建立一个 Data Access Logic 模块(例如: CustomerDal_LEGACY )专门包含这部分代码,然后,在 DAF 中使用 ** Adapter ** Pattern 将其统统归入门下(当然了,也可以在这个专用 Data Access Logic 模块中直接包装,但作者更喜欢使用 DAF 干这样的杂事 J )!

Ok ,文字看累了,来段代码瞅瞅:

代码 9 :掀起 Data Access Logic 的盖头来!

// DalBase :提供大部分应用程序所需的基本数据访问支持,

// 包括分布式处理,数据缓存支持等 ** **

public class ** DalBase **

{

public ** DalBase ** () { }

protected string GetDistributionType()

{

string strType = null ;

... // 根据当前调用上下文和配置文件得到所需数据

return strType;

}

protected ** CacheParam ** GetCacheParam()

{

** CacheParam ** param = null ;

... // 根据当前调用上下文和配置文件得到所需数据

return param;

}

...

}


下一段: http://www.csdn.net/develop/Read_Article.asp?id=27554

Published At
Categories with Web编程
Tagged with
comments powered by Disqus