Enterprise Library: Data Access Application Block类设计分析篇

Enterprise Library: Data Access Application Block类设计分析篇

 

 

Written by: Rickie Lee (rickieleemail#yahoo.com)

My blog: www.cnblogs.com/rickie

Data Access Application Block包含如下特性:

  • 简单且有效的方式访问通用数据库。
  • 透明支持多数据库类型的开发。
  • 映射逻辑数据库实例名和物理连接。
  • 方便地调整和验证数据库配置设置。

 

类设计视图

下图来自Enterprise Library文档,描述了DAAB中主要类之间的关系:
Enterprise_DAAB_ClassRelationship.jpg

抽象类Database定义了通用接口并提供了大量数据访问方法的实现,SqlDatabase, OracleDatabaseDb2Database类均继承Database类,它们分别对各自的数据库服务系统提供了方法,包括不同数据库系统的通用功能和特定数据库系统的特有功能。

 

不同数据库系统之间数据库命令和参数处理方式不一样,抽象类DBCommandWrapper为特定的数据库类提供了接口定义,包装IDBComand接口并提供参数处理。

 

DatabaseFactory类提供了静态方法CreateDatabase,用来封装创建Database对象的逻辑。通过使用该工厂方法创建正确的Database对象,客户端代码并没有绑定到特定的数据库类型。DatabaseFactory类使用Configuration Application Block检索必要的配置信息,包括要创建的特定Database继承类的类型名称和连接字符串。

 

DAAB支持参数的动态发现,该发现机制需要一个到数据库系统的往返(roundtrip)。ParameterCache类允许缓存参数信息,这样可以避免随后对相同存储过程调用的往返,因此参数信息已经在缓存中。

 

简化数据访问

Application Block提供了少量的接口来简化大多数通用的数据访问任务。它提供了一个抽象基类Database,该基类如下一组方法:

  • ExecuteDataSet
  • LoadDataSet
  • ExecuteReader
  • ExecuteScalar
  • ExecuteNonQuery
  • UpdateDataSet

 

上述每一个方法都有大量的重载,这些重载允许对每一个方法的传递信息进行不同程度的控制,并且接受不同的编程风格。其中一个重载方法允许你传递DBCommandWrapper类型的对象,抽象基类DBCommandWrapper同时封装命令和参数处理到一个单一对象。意味着Database类的方法仅需要DBCommandWrapper对象为唯一参数,如下code snippet所示:

DBCommandWrapper dbCommandWrapper = db.GetStoredProcCommandWrapper("GetProductsByCategory");

dbCommandWrapper.AddInParameter("@CategoryID", DbType.Int32, 2);

 

DataSet productsDataSet = db.ExecuteDataSet(dbCommandWrapper);

同时,Application Block封装了对数据库连接的生存期管理,简化开发人员的工作量和代码。

 

数据库透明和数据库逻辑命名

抽象Database类提供了大量的数据方法方法,并且隔离特定数据库相关的特性,如ExecuteXmlReader方法只有SqlDatabase类提供。因为DatabaseFactory返回Database类型对象,client端代码必须转换到特定数据库类型,如下code snippet所示:

SqlDatabase dbSQL = (SqlDatabase)

DatabaseFactory.CreateDatabase("EntLibQuickStartsSql");

...

XmlReader xmlResults = dbSQL.ExecuteXmlReader(dbCommandWrapper);

 

DAAB支持开发人员通过逻辑名称来引用他们的目标数据库,如CustomersInventory。所有的DAAB方法都不接受数据库连接信息,但是CreateDatabase方法接受包括逻辑名称的字符串。工厂使用逻辑名称来定位合适的数据库类型和配置文件中连接信息,如下code snippet所示:

Database db = DatabaseFactory.CreateDatabase("Customers");

逻辑命名允许开发人员在代码中引用多个数据库实例,甚至异构的数据库类型。

 

***

作者:Rickie Lee (rickieleemail#yahoo.com)

本文参考/翻译Microsoft patterns & practices Enterprise Library, DAAB section文档,如下References还提供相关文档的链接。

 

References:

1. Microsoft patterns & practices Enterprise Library

2. Rickie, Microsoft patterns & practices Enterprise Library January 2005 [中文稿], http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html

3. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html

4. Rickie, Enterprise Library: Data Access Application Block使用向导,Part 1,

http://www.cnblogs.com/rickie/archive/2005/02/05/102248.html

5. Rickie, Enterprise Library: Data Access Application Block使用向导,Part 2, http://www.cnblogs.com/rickie/archive/2005/02/06/102656.html

6. Rickie, Enterprise Library: Data Access Application Block配置文件分析篇, http://www.cnblogs.com/rickie/archive/2005/02/07/102984.html

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=462983
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值