VS2005数据存取层深入剖析之高级篇(3)

http://www.sina.com.cn 2006年11月20日 09:11  天极yesky

  四、 应用数据映射模式

  一个数据映射(DM)对象负责把从表格中提取的原始数据加载到内存对象(这些对象被更为紧密地映射到更高一级:实体-关系数据模型)。该DM模式尤其适合于复杂的域逻辑领域—此时数据的物理结构必须被加以提取以便直接编码、简化阅读和确保恰当的维护费用。典型地,一个高度复杂的逻辑一般都有一些额外要求,例如多数据库支持和严格的单元测试等。在两种情况下,不同的系统发布,或开发周期中的不同步骤,可能要求替换整个数据映射层以便应用一种不同的逻辑,针对不同的目标数据库,或是仅为了实现测试目的。你进行越多的抽象并且在系统中进行越多的分层,那么以后对于你以及你的客户将越发有益。

  毋庸置疑,该DM模式有时看起来有些过于复杂,但对于丰富的而复杂的系统来说一定是一种可行的选择。一种更为简单的变种,特别适合于简单的逻辑实现,就是活动记录模式。

  在一种DM情况下,你需要为抽象数据模型中的每一个实体创建许多类。你将创建一个实体类(也许一个类型安全的集合类)和一个管理器类来为DAL提供公共入口点。列表5展示了一些具体的示例代码。

  列表5.DM模式(Employee实体)的示例代码。

Public Class Employee
 Public ID As Integer
 Public FirstName As String
 Public LastName As String
 //……
End Class
Public Class EmployeeCollection : Inherits Collection (Of Employee)
End Class
Public Class EmployeeManager
 Public Function FindAll() As EmployeeCollection
 Public Function Find(ByVal empID As Integer) As Employee
 Public Sub Update(ByVal emp As Employee)
 Public Sub Insert(ByVal emp As Employee)
 Public Sub Delete(ByVal emp As Employee)
 Public Sub Delete(ByVal empID As Integer)
 Public Function FindOrders(ByVal empID As Integer) _
 As OrderCollection
 //……
End Class

  这个EmployeeManager类中提供的方法实现怎么样?不管在你的设计中引入了多少的抽象,在某种程度上你都需要手工实现连接字符串,ADO.NET命令和事务等内容。当然,你能够把这部分代码直接插入到EmployeeManager的方法体内。然而,还有一种更好的方法就是,使用一组基于TDG模式的中间集合类来实现这一点。图7展示了整个实现框架。

VS2005数据存取层深入剖析之高级篇(3)
图7.一个使用了模式的多层应用程序架构。

  其基本思想是,由描述层创建一个给定实体(比如说,employee表格)的管理器类的实例。一方面,该管理器类要对描述层暴露高级对象;另一方面,它还负责连接到底层DAL以便进行物理数据存取。在该管理器和DAL可能存在各种层。为了实现更多的灵活性,你可能想使用一种可替换的工厂机制并且是针对不同的数据库的。

  反过来,从描述层对管理器类的调用将会实例化一个数据存取提供者工厂类。这个类将从配置文件信息(类和程序集)中读取关于该工厂类的信息以便用来创建其支持的实体(如雇员,顾客,产品,订单等)的数据提供者。

  每个工厂类都要实现一个合同接口—该接口将依赖于一个方法来返回针对各种实体的数据提供者。最后,这些数据提供者要实现一个接口以便与管理器类中的方法相匹,并使用TDG模式来得到/设置一特定数据库中的物理数据。

  基于这一模式,通过简单地改变一下配置文件内的某个入口,你就可以使整个系统工作在一个完全不同的数据库之上。现在,你有了一些类—数据提供者—你可以在其中编写优化的数据库代码—并且由于使用了基于合同的接口,所以你不必去打破与上一层的关系。

本文导航:
·扩展表格适配器
·生成代码评价
·应用数据映射模式
·应用表格数据网关模式

发表评论 _COUNT_条
Powered By Google
不支持Flash
·城市对话改革30年 ·新浪城市同心联动 ·诚招合作伙伴 ·企业邮箱畅通无阻
不支持Flash