`
liujinmarshall
  • 浏览: 118339 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

企业应用架构模式读书笔记(二) Domain Model

阅读更多

  这个笔记主要记录一下领域模型。

  第一次听说领域模型是在JavaEye的一个帖子上。 也就是那个经典的robbin总结。那时候看是一头雾水,根本不知所云,虽然当时已经是大三下半学期,开发了学院的那个CMS。从IBM回来以后,开始着手重新启动APIS的开发,同时引入了Spring框架。一些项目上的心得,再加上对APIS设计上的疑惑加在一起,重新再看那篇帖子,真是豁然开朗啊。同时也去了Martin Fowler的Bliki上看了那篇批判贫血模型的blog

  其实所谓的领域模型,我在使用Hibernate的时候,就已经使用了这个模式。不过在Martin Fowler写这本书的时候,Hibernate不知道存不存在,即使存在,也肯定很不成熟吧。通过O-R Mapping,我们建立了领域模型。比如说,对于PoEAA书里那个例子来说,建立了Contract, Product, RevenueRecognition三个领域对象。这些对象之间通过引用互相联系。同时把一部分验证、计算的逻辑放在了领域对象里。非常重要的一点是,这些领域对象,或者说这些类,可以存在继承或者关联关系,也拥有多态、封装的特性。可以说把OO发挥得淋漓尽致(不过发挥过头了也不好)。先贴一张图吧,就是书里的类图。

  (附带说一下,CSDN里图片上传以后的那个预览窗口里那些文字不知道为什么还保留着,根本没有用。这个FCKeditor改得不够?)

 三个领域对象互相关联。同时对不同的产品,使用了不同的计算策略(Strategy模式)。

  底层的数据映射模式,可以使用Data Mapper,或者是Active Record(就是RoR里的那个),前者通过另外一个类似DAO的类来处理CRUD,而Active Record在领域对象内部处理持久化。Fowler的观点好像是不需要DAO了。

  另外,对x血模型我也不是很清楚。有很多种说法,就是在JavaEye上看到的,robbin说的都不一样。最典型的就是关于贫血模型了(Anemic Domain Model),根据Fowler的说法,就是把所有的Domain Logic抽到Service 层以后,只有单纯的getter和setter的领域对象模型。而充血模型(Rich Domain Model),在底层那些POJO里就包含了一部分的逻辑。但把事务处理等工作交给了Service Layer。另外还有一个胀血模型(Bloated Domain Model),是一个反模式,把所有的工作都交给了领域对象,包括事务(因为事务总是经常要涉及到其他部分)。

  还有一个失血模型,英文不知道,内容也不太清楚。这是我的理解。还有另外一种说法,同样没有失血模型的描述。也是在JavaEye上,robbin总结的帖子

  1. Anemic Domain Model: Service --> DAO --> Domain Object
  2. Rich Domain Model: Service -->Domain Object <--> DAO
  3. Bloated Domain Model: Domain Object <--> DAO

 如果是这样的话,其实这和Fowler所定义的的贫血好像并不一样。脑子有点被搞糊涂了,呵呵。不过我想追究这么多,搞清楚概念也没什么用。重要的是自己去实践一下,哪个好用,易于扩展、易于维护。到底是不是纯粹的OO,并没有那么重要。

分享到:
评论

相关推荐

    互联网及其应用串讲笔记

    本文将深入解析互联网的架构、原理及其在计算机网络中的应用,旨在为自考计算机网络本科的学生提供一份全面的精讲笔记。 #### 一、互联网的基础概念 互联网(Internet)是一个全球性的网络系统,由无数个互相连接...

    The definitive Guide To Grails学习笔记

    在第一篇笔记中,我们通常会了解Grails的基本架构,包括其MVC(Model-View-Controller)设计模式的应用,以及如何快速创建一个基础的Grails应用。Grails的自动化工具如命令行接口(Command Line Interface, CLI)也...

    jsp笔记各种资源包

    文件可能包含了关于JSP的详细学习笔记,涵盖了基础概念、语法、生命周期、内置对象、EL(Expression Language)、JSTL(JavaServer Pages Standard Tag Library)以及MVC(Model-View-Controller)设计模式等内容。...

    MVC框架struts学习笔记

    Struts 是一个基于 Model-View-Controller (MVC) 设计模式的 Java Web 开发框架,主要用于构建可维护性高、结构清晰的Web应用程序。在Struts框架中,MVC模式帮助开发者将业务逻辑、数据处理和用户界面解耦,提高了...

    电力系统技术总结笔记

    电力系统技术总结笔记主要涉及了Java Web开发中的SSH框架,这是一种经典的MVC(Model-View-Controller)架构,用于构建动态、数据驱动的Web应用程序。SSH由三个主要部分组成:Struts作为控制器,Spring作为业务层...

    马士兵Struts2笔记2013

    Struts2是一个流行的Java web框架,用于构建MVC(Model-View-Controller)架构的应用程序。以下是关于"马士兵Struts2笔记2013"中的关键知识点详解: 1. **建立Struts2工程** 创建一个Struts2工程通常涉及在集成...

    Struts2 学习笔记.doc

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,为开发者提供了构建可维护性和可扩展性高的Web应用程序的工具。以下是对Struts2核心概念和特性的详细说明: 一、Struts2的作用:...

    马士兵struts2课程的学习笔记

    Struts2是一个流行的Java Web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。马士兵的Struts2课程是学习该框架的重要资源。以下是对该课程笔记的详细解析: 1. **导入包**:在使用Struts2之前,首先...

    HCNA笔记V1.1.pdf

    笔记中提到的“OSI模型”是指开放系统互连参考模型(Open System Interconnection Reference Model),它是一个定义不同网络系统之间如何进行交互的国际标准。OSI模型将计算机网络划分为七个层次,从上到下分别是...

    笔记本中的internet

    通过将Parallels与Dynamips相结合,可以在笔记本上模拟出包含资源子网和通信子网的完整网络架构,从而实现对WAN环境下各种应用场景的测试。 #### 六、总结 综上所述,利用VMware等虚拟化软件,在笔记本中构建超级...

    华为招聘java工程师面试题附带面试笔记(以及如何写好java简历等)

    最体现能力是:domain model 描述项目: 描述做了什么模块? 简单描述需求,用一种思路描述设计,以及思路的逐步完善。 面试之前要把思路整理一下,有条理的说出来...........(附件中有详细内容)

    Struts2学习笔记

    - **核心功能**:Struts2框架的核心功能之一就是将业务逻辑与展示层分离,实现MVC(Model-View-Controller)架构模式。这有助于提高代码的可维护性、可扩展性和可测试性。 - **请求处理**:通过定义特定的Action来...

    Struts2学习笔记2011(详细图解)

    Struts2是一个强大的Java Web应用程序框架,用于构建MVC(Model-View-Controller)架构的Web应用。这个框架简化了开发过程,提供了丰富的功能和高度的可扩展性。以下是对Struts2框架学习的一些关键知识点的详细解释...

    java知识点汇总学习路线与笔记

    - **DomainModel(领域模型)**:用于表示应用程序中的核心业务概念。 - **Pattern(RBAC权限设计)**:模式在软件设计中非常重要,RBAC是基于角色的访问控制。 - **Framework**:框架为开发人员提供了一套可重用的...

    struts2学习笔记

    Struts2是Java Web开发中的一个MVC框架,它为构建基于Java的Web应用程序提供了一个强大的架构。以下是对Struts2关键知识点的详细说明: **一、Struts2的作用** Struts2的主要目的是简化Java Servlet和JSP的开发,...

    111D:\keke\grails指南\笔记\1111111.txt,grails 初学者,使用说明的。

    它采用了MVC(Model-View-Controller)架构模式,其中模型负责处理业务逻辑,视图用于展示数据,控制器则作为模型和视图之间的桥梁,负责处理用户请求。 ### 安装配置 首先,确保系统中已安装Java环境,因为Grails...

    struts2學習筆記

    Struts2是一款强大的Java EE应用程序框架,主要用于构建MVC(Model-View-Controller)架构的Web应用。它提供了一种结构化的控制层,使得开发人员可以更加专注于业务逻辑,而非底层的HTTP请求处理。这篇笔记主要涵盖...

    grials22D:\keke\grails指南\笔记\1111111.txt,grails 初学者,使用说明的。

    Grails支持MVC(Model-View-Controller)架构模式,使得开发者能够清晰地分离应用程序的不同部分,提高代码的可读性和可维护性。 ### Grails基本概念 1. **Domain Classes**:领域模型是Grails应用的核心组成部分...

Global site tag (gtag.js) - Google Analytics