`
巴赫的梦幻
  • 浏览: 73859 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

领域模型

阅读更多

这几天阅读了InfoQ上下载的“领域驱动设计-精简版”。感觉还是有不少的收货的。在这里记录一下自己的一些理解。

 

1. 实体与值对象。
  实体与值对象最大的区别在于“实体需要由标示符来唯一的定义”,而值对象无需持有标示符。实体的标示符可以是基于数据库层面的唯一索引,也可以采用若干个属性的组合来实现一个实体。对于值对象来说,由于它并没有唯一性的标识符。因此,值对象可以非常方便的传递和共享的。这就要求,作为值对象应该具有“不变性”。


2. 领域服务
  领域服务通常具备了如下的三个特征:首先,领域服务并不隶属于某一个值对象或者实体。其次,领域服务中常常会涉及到其它的领域对象。最后,领域服务通常都是没有状态的。


3. 内聚、工厂、仓库

  在梳理领域模型的过程中,模型之间的关联关系常常很复杂。因此,需要我们按照如下的步骤梳理模型之间的关联关系。

  1. 去除非本质的关联关系。

  2. 尝试在一对多的关联关系中加入约束条件,以减少依赖。

  3. 尽量去除双向依赖。

 

  内聚,在领域建模的过程中,通常是这样的一个建模过程:

  1. 让实体持有各个值对象的引用。实体,将作为外部唯一可以访问的模型。

  2. 每一个内聚,都有一个根。而这个根,就是实体对象。

  3. 对于值对象,可以通过根,来控制外部对其的访问。

  4. 通常情况下,只有聚合中的实体,可以通过数据库构造。其他的模型只能通过模型间的关联关系构造。

 

  工厂,其主要的作用在于对外屏蔽复杂对象的创建过程。因此,外围系统不需要了解任何创建对象的知识。

 

  仓库,其中主要封装了,从存储介质中获取对象的逻辑。

 

4. 关于重构

  “使用基础构造元素,并采用统一的领域语言将为工作带来成效”。个人感觉,重构需要本着上述的原则,对代码进行持续的优化。同时在重构的过程中,结合领域专家的意见,完善领域模型。

 

5. 关于领域模型上下文

   领域模型的上下文通常需要和领域模型一同构建。所谓的领域上下文通常是指“一组条件的集合”。将上下文进行一定的抽象,并将上下文与领域模型进行关联。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics