`

关于数据访问模式(四)—— Active Domain Object模式

阅读更多

        古人云:温故而知新。在讨论新的数据访问模式之前,我们先来回忆一下上一篇Post中提到的Data Accessor模式吧。
        Data Accessor提供了一种解耦合的策略:将数据库访问的细节进行逻辑抽象并封装于单一组件中,从而降低数据访问和数据模型之间的耦合性。对于应用程序而言,它并不了解具体的数据访问操作,如建立数据库连接和执行SQL语句等,但是它仍然了解数据模型的具体结构,譬如数据表名和某一数据表的列名等。因此,应用程序虽然脱离了数据访问的烦恼,但仍然与数据模型紧密耦合在一起。如果数据模型发生改变,或者数据模型的建立并非通过静态描述即可完成的,都会令应用程序不得不面临大范围的改动。在这个时候,Active Domain Object(主动域对象,以下大部分地方简称ADO)模式就可以大展身手了。
        ADO模式的实质很简单,就是将数据模型的细节也封装在单一组件中,对应用程序仅公开与业务逻辑相关的通用操作。我们之所以把这样的对象称为Active,正是因为对象本身包含了数据模型和与业务逻辑相关的数据访问操作,而不仅仅是数据的载体(如果将数据访问的代码剥离,那么Active Domain Object就会退化成Domain Object/Value Object)。从这个角度出发,上一篇Post中给出的代码已经无意中使用了与ADO十分类似的模式:

public class UserDAO extends DAOSupport {
    
private Connection conn = getConnection();
        
}

根据自己参与过的一个项目的经验,UserDAO中可以包含很多与业务逻辑相关的方法,例如getVIPUser等。如果UserDAO本身包含了User的属性,并将UserDAO改为User,UserDAO摇身一变就成为了一个Active Domain Object变体。但是这样的UserDAO并非是一个纯粹的Active Domain Object,因为其包含的逻辑操作并不是通用的操作。通常,定义在一个Active Domain Object的通用操作主要有四个方面:

        1、初始化(Initialize):读取一个或多个数据表以初始化Domain Object的内容;
        2、刷    新(Refresh):当数据表发生更新之后,通过这样的操作以更新Domain Object的内容;
        3、保    存(Save):将Domain Object内容的改变持久化至数据表中;
        4、列    表(List):根据查询条件获得所需的单个Domain Object或者Domain Object集合。

有了这样四个方面的操作,我们可以将应用程序中的业务逻辑看作是若干个Active Domain Object的若干次通用操作的组合体。在这样的前提下,应用程序的业务逻辑将会更加的清晰,而便于维护。同时将应用程序和数据模型解耦合了,即使数据模型发生了改变,应用程序的改动也将会是很小的。
        ADO模式的思想很好理解,但是要建立一个满足应用程序需求的Active Domain Object就并非易事了,会有很多问题需要考虑:譬如,Domain Object的创建是否仅仅以单表作为依据呢?还是需要建立与联接表对应的Domain Object呢?Domain Object的属性是不是就简单的引入一个表中的所有列呢?对应用程序而言,仅仅是逻辑操作是可见的,那么Active Domain Object封装的与逻辑操作相关的数据访问性能是否足够好呢?诸如这类问题都是在设计和实现Active Domain Object的时候要深思熟虑的。

[1]  参考书籍:<!---->《数据访问模式——面向对象应用中的数据库交互》

分享到:
评论

相关推荐

    一致的数据访问技术——ADOOLE DB

    ### 一致的数据访问技术——ADO/OLE DB #### 一、一致数据访问技术概述 随着信息技术的快速发展,数据集成的需求日益增长。为了更好地管理和访问来自不同来源的数据,Microsoft提出了**一致数据访问技术**...

    ActiveObject

    回到描述中的"active object应用实例",我们可以假设这是一个关于如何在实际项目中使用Active Object模式的例子。比如,`MyFirstGame v4.0`可能是一个游戏应用,其中包含多个并发运行的游戏逻辑组件。每个组件(如...

    LINQ数据访问技术——基于C#

    **LINQ数据访问技术——基于C#** LINQ(Language Integrated Query,语言集成查询)是.NET框架中的一个重要特性,它为C#等编程语言提供了在代码中查询数据的强大能力。LINQ使得数据查询更加简洁、直观,同时也提高...

    ActiveObject.pdf

    当实体模型发生变化时,如在上面的例子中向`Person`实体添加`getAge()`和`setAge()`方法,ActiveObject能够智能地检测到模式差异,并仅执行所需的DDL语句来适应这些变化。例如,如果数据库中已存在`person`表,且...

    关于dao设计模式学习资料

    - **ActiveDomainObject模式**:实现了业务数据的对象化封装。在这个模式下,业务数据以对象的形式存在,而不是简单的数据结构或记录集合。这种方式使得数据更易于管理,并且更符合面向对象编程的原则。 这两种模式...

    Active Directory Domain Services

    Active Directory Domain Services(ADDS)是Microsoft Windows Server操作系统中的一项核心服务,用于实现集中化的网络管理、单点登录访问、集成的安全性和可扩展性等功能。ADDS提供了对用户、计算机以及其他网络...

    利用VB中的Active Data Object访问SQL Server数据库.pdf

    利用VB中的Active Data Object访问SQL Server数据库.pdf

    ActiveObject 对象 Msxml2.DOMDocument 详解

    本文将深入探讨ActiveObject中的一个关键对象——Msxml2.DOMDocument,以及它在ASP.NET AJAX WebService中的应用。 Msxml2.DOMDocument是Microsoft XML库(MSXML)中的核心组件,它实现了W3C的Document Object ...

    STM8单片机低功耗 活跃停机Active Halt模式实现

    本文将深入探讨如何在STM8S003单片机上实现低功耗的"活跃停机"(Active Halt)模式,以及如何通过寄存器编程来控制这一过程。 "活跃停机"模式,也称为Active Halt,是STM8单片机提供的一种节能工作状态。在这个模式下...

    ActiveObject模板

    4. **线程安全与异常处理**:ActiveObject模式确保了对耗时操作的访问是线程安全的,因为每个请求都在新的线程中执行,避免了阻塞主线程。此外,异常处理机制(如try-catch)可以封装在执行任务的线程中,防止异常...

    java模式_DAO模式[汇编].pdf

    DAO(Data Access Object)设计模式是Java开发中用于处理数据访问的一种常见模式,它结合了Data Accessor模式和Active Domain Object模式。DAO模式的主要目的是为了分离数据访问逻辑和业务逻辑,提高代码的可读性、...

    Active Directory Domain Services 2008 How-To

    由于提供的文件内容主要是一本名为《Active Directory Domain Services 2008 How-To》的书籍的版权信息和出版细节,并没有包含具体的IT知识点,所以无法直接从这部分内容生成详细的IT知识点。但是,可以基于书籍标题...

    Object Restore for Active Directory_10

    大家经常会在维护AD的同时有可能误删除用户,OU... QUEST Object Restore for Active Directory(这是QUEST很少的免费软件之一,相比QUEST Recovery Manager for Active Directory功能弱很多,但是我们还是可以使用到)

    ASP.NET源码——数据库访问层源码.zip

    4. **Active Record模式**:在实体类中直接包含数据访问代码,简化了代码结构,但可能导致业务逻辑和数据访问耦合过紧。 5. **Entity Framework**:Microsoft提供的ORM(对象关系映射)工具,能够自动将对象模型映射...

    电动工具无刷电机低成本控制解决方案——基于Active-Semi PAC5223集成全桥驱动芯片.pdf

    电动工具无刷电机低成本控制解决方案——基于Active-Semi PAC5223集成全桥驱动芯片.pdf

    经典高级并发编程实践

    Active-Object(活跃对象)模式是一种被广泛使用的并发设计模式,它通过解耦方法调用与执行来简化多线程环境下对象访问的同步问题。 #### 二、Active-Object 模式的概念 Active-Object 模式是一种行为模式,其核心...

    Microsoft Visio 2016 active tool——亲测可用

    Microsoft Visio 2016 active tool——亲测可用

    Active-HDL使用教程——仿真篇

    以下是关于Active-HDL仿真功能的详细讲解: 一、Active-HDL简介 Active-HLD是一款由Aldec公司提供的综合性EDA工具,支持VHDL、Verilog以及SystemVerilog等主流HDL语言。它的主要功能包括设计输入、编译、仿真、综合...

    OPC数据访问客户端的研究与实现.pdf

    本文的研究成果是一个基于活动模板库(Active Template Library, ATL)和VC++ 6.0开发环境实现的OPC数据访问客户端程序——MyOPCClient。ATL是微软提供的一组用于简化COM类实现的C++模板库,这使得开发者能够更方便...

Global site tag (gtag.js) - Google Analytics