小议领域模型(Domain Model)

原创 2006年06月15日 20:56:00
(同步自http://www.blogjava.net/AndersLin/archive/2006/06/15/53086.html)  
<<Domain Driven Design>> 和<< Patterns of Enterprise Application Architecture >>,令Domain 这个词很火,也引起了广泛争论。我这里也乱谈一把。

什么是领域模型(Domain Model)
   我以为Domain分两个含义:Domain Object和Domain Service。那么什么样的系统是面向Domain的系统,一个Domain Object和普通的符合OO原则的对象有什么区别;一个Domain Service和普通的Facade或者Manager对象有什么区别。
概念上,一个Domain Object和普通的符合OO原则的对象有声明区别:Domain Object是业务意义上,承载了业务数据(我据此认为所有Domain Object是有状态对象),从本质上说它直接来源于现实世界,没有技术层次上的考虑,“符合OO原则的对象”是用OO方法分析得到的,是基于计算机领域技术的(这样的对象可以是无状态的);但反过来,符合OO的对象不一定反应DOMAIN 的OBJECT。

技术上,Domain Object是指那些包含需要被透明持久化的属性,以及相关业务逻辑(体现在Use Case中)POJO。仔细观察旧的系统,发现Transaction Script还是Table Module操作都的是来自数据库(或者其它持久化通道)的数据,Transaction的业务逻辑是零星片断。而Table Module其操作的是同一类业务数据集合,包含明显的数据库痕迹。而一个Domain Object包含了这些需要被持久化的业务数据,同时还包含了与之相关所有业务操作,并且有自己的继承体系。Martin Fowler认为有了这些就可以称为是一个Domain Object,因此在其PoEAA中的ORM包含了一些不透明的持久化方案。我认为一个真正的Domain Object需要一个透明持久化。

Domain Service包含的商业逻辑包含了两部分:流程逻辑和控制逻辑。
1. 业务领域的流程逻辑(Business Process)。指一系列的业务行为,包括Domain Object的属性更新;Dao的创建、更新和删除操作以及对Domain Service中的包括Mail,网络等方法的访问。
2. 业务领域的控制逻辑(Business Rule)。A rule is a declarative statement that applies logic or computation to information values。Business Rule 1. 产生一些控制信息,限制或者触发某些行为的执行;2. 产生一些状态信息,提供给业务人员参考操作。A rule results either in the discovery of new information or a decision about taking action.。

而Facade或者Manager是完全从技术上考虑的,尤其是Facade,通常处理如下逻辑:1. 与表现层通信工作,把表现层的平面数据(VO)转换为相关联的Domain对象,把Domain对象计算的结果转换成平面数据(VO)返回给表现层;2. 根据Use Case完成商业逻辑(面向事务)的调度,包括其业务关联的Domain Object和Domain Service调度,其可能调度了多个Domain Service。在简化的情况下,Facade有时和service可以等同。

如果把一个系统看作是一个Mechanical组件的话,那么Domain Object就是其Structure,相当于人的骨架;而流程逻辑就是Power,相当于骨架上的肌肉;那么控制逻辑就是Control,相当于肌肉中的神经。

Domain应用的可能 
JavaBean方案,采用SQL mapping,只映射字段,不支持关联关系的映射,没有多态。但随着ORM框架的发展,如hibernate,提供支持关联关系,继承多态的能力,Domain Object成为可能。

Cooperation Object:Domain Model之外
Domain Model描述了一个面向问题领域的对象组织结构,和行为逻辑。而同时系统还需要另一些称为协作对象的,来帮助我们处理特定的技术问题。

应用domain 的体系结构

      Domain Service  |           Cooperation Object
      Domain Object   | (包括了Dao在内的处理技术问题的辅助对象)

其它
Domain Model存在于系统的各个地方,不过在不同地方有不同的映射实现。在通常的开发过程中,该映射存在于文档和开发人员的脑海中的。当要向客户展示时,就面临一个映射的关系。比如要允许客户可以在线编辑页面呈现的显示元素,在规则定义里使用对象系统时。
另外Domain在不同视图下导致不同的内容。比如一个代理人Agent对象,在party的视图下只拥有基本属性,而在Sale channel视图下就保存了一些额外信息如:考核记录,优秀率等。

小议领域模型(Domain Model)补充以及更新

Author: Anders小明为何要Domain Model传统的开发方式:基于数据库的设计开发。数据库提供的设计模型是表和字段两种粒度,这两种粒度有时并不合适于系统设计:1. 模型的结构化能力1....
  • lins
  • lins
  • 2007年12月15日 01:24
  • 2832

从贫血到充血Domain Model

关于Domain Model的讨论已经非常多了,炒炒冷饭,这里是自己的一些做法。以Workitem(工作流里的工作项)作为例子最开始的做法:一个实体类叫做Workitem,指的是一个工作项或者称为任务...
  • ronghao100
  • ronghao100
  • 2008年07月03日 16:49
  • 1777

领域模型(Domain Model )

> 和>,令Domain 这个词很火,也引起了广泛争论。我这里也乱谈一把。 什么是领域模型(Domain Model )    我以为Domain分两个含义:Domain Object和Dom...
  • Scofield_zao
  • Scofield_zao
  • 2013年09月29日 20:24
  • 927

EntityModel、DomainModel和ViewModel代码实例讲解

目前项目中可能出现的三种Model模式,对于我们现在开发的一个项目,我觉得使用DDD的思想来设计模型比较清晰,使用DDD的思想把模型model分成了如下三种: 上面的图中把模型分成了ViewModel...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:22
  • 890

0109 领域模型(Domain Model )【基础】

> 和>,令Domain 这个词很火,也引起了广泛争论。我这里也乱谈一把。 什么是领域模型(Domain Model )    我以为Domain分两个含义:Domain Object和Dom...
  • junlinbo
  • junlinbo
  • 2015年02月09日 11:19
  • 234

领域模型驱动设计(Domain Driven Design)入门概述

软件开发要干什么: 反映真实世界要自动化的业务流程解决现实问题 领域Domain Domain特指软件关注的领域在不能充分了解业务领域的情况下是不可能做出一个好的软件 ...
  • johnstrive
  • johnstrive
  • 2013年11月18日 15:41
  • 43166

论基于数据访问的集合类(Data Access Based Collection)和领域事件(Domain Event)模式

让精心构建的对象模型高效地工作有很多底层的技术问题需要解决,其中如何满足领域对象的业务方法在计算过程中对数据的需求是一个普遍存在的问题。对于这一问题,目前有两种模型可供借鉴,那就是基于数据访问的集合类...
  • bluishglc
  • bluishglc
  • 2011年07月19日 14:54
  • 8385

domain、entity和model的package的不同用法

以前写项目,都是先快速创建entity、dao、service再说,其他的包一般都是根据不同的框架来创建不同功能的包。比如用struts框架创建一个action包,用servlet就创建一个servl...
  • qq_32447321
  • qq_32447321
  • 2016年11月13日 11:34
  • 1427

函数式与响应式的领域模型<Functional and Reactive Domain Modeling>(二)

2. Scala构建函数式领域模型本章包含: >理解为什么scala设计领域建模的最好语言之一 >使用静态类型语言理解域建模的好处(scala是静态语言,并不是动态语言) >将Scala的OO和FP功...
  • qq_31179577
  • qq_31179577
  • 2017年09月04日 10:15
  • 266

Domain Model的三种类型及其级别

Author: Anders小明(2008-1-12更新)从以上的分析中,我们可以了解到Domain Model分为三种类型:0. 全局常量对象1. 长生命周期业务对象(类似保单对象);2. 交易过程...
  • lins
  • lins
  • 2008年01月08日 22:31
  • 3322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小议领域模型(Domain Model)
举报原因:
原因补充:

(最多只允许输入30个字)