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

 

原文地址:https://www.cnblogs.com/rickie/p/103271.html