Enterprise Library: Data Access Application Block类设计分析篇
2005-02-08 03:57
253 查看
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中主要类之间的关系:
抽象类Database定义了通用接口并提供了大量数据访问方法的实现,SqlDatabase, OracleDatabase和Db2Database类均继承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支持开发人员通过逻辑名称来引用他们的目标数据库,如Customers和Inventory。所有的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 [中文稿], /article/4622953.html
3. Rickie, Enterprise Library released! /article/4622952.html
4. Rickie, Enterprise Library: Data Access Application Block使用向导,Part 1,
/article/4622957.html
5. Rickie, Enterprise Library: Data Access Application Block使用向导,Part 2, /article/4622958.html
6. Rickie, Enterprise Library: Data Access Application Block配置文件分析篇, /article/4622959.html
Written by: Rickie Lee (rickieleemail#yahoo.com)
My blog: www.cnblogs.com/rickie
Data Access Application Block包含如下特性:
简单且有效的方式访问通用数据库。
透明支持多数据库类型的开发。
映射逻辑数据库实例名和物理连接。
方便地调整和验证数据库配置设置。
类设计视图
下图来自Enterprise Library文档,描述了DAAB中主要类之间的关系:
抽象类Database定义了通用接口并提供了大量数据访问方法的实现,SqlDatabase, OracleDatabase和Db2Database类均继承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支持开发人员通过逻辑名称来引用他们的目标数据库,如Customers和Inventory。所有的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 [中文稿], /article/4622953.html
3. Rickie, Enterprise Library released! /article/4622952.html
4. Rickie, Enterprise Library: Data Access Application Block使用向导,Part 1,
/article/4622957.html
5. Rickie, Enterprise Library: Data Access Application Block使用向导,Part 2, /article/4622958.html
6. Rickie, Enterprise Library: Data Access Application Block配置文件分析篇, /article/4622959.html
相关文章推荐
- Spring设计及源码分析
- 【EA+UML+PHP实例】WinBlog微博系统分析及设计下载
- 电信运营商三户模型的设计分析(转载)
- 20180323算法设计分析HW3 分治上机三题
- 对一个网站设计调查报告的分析
- Struts例子的设计分析
- 网上桌面棋牌游戏分析与设计
- 面向对象建模与数据库建模两种分析设计方法的比较
- Android源码设计模式分析开源项目
- libev源码分析---整体设计
- 数据仓库数据库设计方法---关系模型和多维模型比较分析
- 电子商务站点设计分析--首屏设计
- Hadoop项目实战-用户行为分析之分析与设计
- 手机进销存管理系统--02需求分析和系统设计
- Tomcat 的设计模式分析
- 团队作业2:需求分析&原型设计
- 敏捷开发下, 如何将需求分析,架构(软件)设计,开发与测试,一气呵成式的结合且高效的完成 ?
- 网狐棋牌游戏平台服务器架构设计分析
- 文本分析的三种典型设计模式
- Java 设计模式情景分析——工厂模式