领域模型基础

概念

实体-entity
  1. 拥有唯一标识符
  2. 能够跨越系统的生命周期甚至能超越软件系统的一系列的延续性和标识符
  3. 这样的对象称为实体。

值对象-value Object
  1. 对某个对象是什么不感兴趣,只关心它拥有的属性
  2. 用来描述领域的特殊方面、且没有标识符的一个对象,叫做值对象
  3. 能被简单的创建和丢弃,生命周期中不会被持久化
  4. 值对象可以被共享,值对象应该不可变

服务-service(比webservice更细粒度服务描述)
  1. 领域中的一些动词,代表了领域中的一个重要的行为,却不属于任何对象
  • 服务执行的操作涉及一个领域概念,这个领域概念通常不属于一个实体或者值对象
  • 被执行的操作涉及到领域中的其他的对象
  • 操作是无状态的
  1. 服务对象不再拥有内置的状态
  2. 服务对象担当重要的协调功能
  3. 开发通用语言时,领域中的主要概念被引入到语言中,语言中的名词很容易被映射成对象。

模块
  1. 将相关领域模型提炼分类,分而治之
  2. 将高关联度的模型分组到一个模块以提供尽可能大的内聚(以能完整完成任务为准)
  3. 分层是水平划分
  4. 模块是垂直划分(Domain内部)

Java领域模型概念

POJO:plain ordinary java object

  • 简单无规则java对象。
  1. POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
  2. POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合。
  • 为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
  • 为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
  • 为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
  • POJO还可以当作DTO使用。

PO:persistant object
  • 持久对象。
  1. 可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。

VO:value object
  • 值对象。
  1. 通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。

DAO:data access object
  • 数据访问对象。
  1. 此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。

BO:business object
  • 业务对象。
  1. 封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。

领域模型分类

失血模型

贫血模型

充血模型

胀血模型