• 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

     

  • 相关阅读:
    将MySQL中的数据导入到Solr
    Solr中schema.xml的Field介绍
    Window下Nginx的安装和启动
    Idea中运行shell脚本
    window10 下安装Mysql5.6
    Solr Admin管理界面使用说明
    Solr 整合中文分词器mmseg4j
    Solr安装和使用
    ActiveMQ 安装和使用
    AbstractQueuedSynchronizer源码解析
  • 原文地址:https://www.cnblogs.com/rickie/p/103271.html
Copyright © 2020-2023  润新知