第三节 领域模型的内容

领域模型从动静两个方面描述问题域。静态方面描述问题域的组成和结构,动态方面描述行为和机制。

领域模型摒弃了一切技术实现细节、视图展现、数据交换等等方面,纯粹描述业务逻辑。

有不少人,包括著名的《UML和模式应用》的作者Craig Larman,认为领域模型只描述问题域的静态方面(组成和结构),而不涉及动态方面(行为和机制),我强烈反对这种观点。领域模型如果不揭示问题域的行为和机制,则价值非常有限。领域模型应该体现全部的业务逻辑,而业务逻辑通过行为和机制来保证。严格来说,对于领域模型而言,动态方面才是本质,体现了系统的意图和目的;而静态方面不过是动态方面的实现手段,居于从属地位。

如果用UML来描述领域模型,我们一般用类图、包图、对象图等描述组成和结构,用序列图、状态图、活动图等描述行为和机制。

领域模型的静态方面:组成和结构

领域模型的静态方面描述问题域的组成和结构。

  • “组成”是指领域模型中有哪些类型的领域对象;
  • “结构”指各个部分如何搭配和安排形成整体。

例如水分子,其组成是氢(H)和氧(O)两种原子,而结构即是两个氢原子分别通过共价键和氧原子结合,两个H-O键的夹角为104.5度。其结构式如下:

abstraction

领域模型主要由各种实体和值对象组成,还包括少量领域服务、仓储和工厂对象。

领域模型的结构可以划分为不同的层级。在模块层级,领域模型描述系统的模块划分,以及模块间的各种依赖关系;在领域对象层级,领域模型描述领域对象间的继承、关联和组合关系,以及领域对象内部的各种属性。

领域模型的动态方面:行为和机制

领域模型除了描述系统的组成和结构,更重要的是要描述行为和机制,通过各种行为和机制实现业务逻辑,进而实现业务价值。系统对外暴露的功能(用例)最终由领域模型的行为机制实现。

  • “行为”是抽象的,表达意图和目的;
  • “机制”是行为的具体实现方式,通常涉及到多个领域对象的相互配合。

以生物界的例子来比喻:

  • “繁殖后代”是生物的一种行为,而细菌的分裂生殖、蘑菇的孢子生殖、种子植物的有性生殖、鸟类的卵生和哺乳动物的胎生等等,是对“繁殖后代”这种行为的各种不同的实现机制
  • “获取能量”是生物的一种行为,而嗜硫细菌将硫化氢氧化为硫和水,高等动物通过三羧酸循环将葡萄糖氧化成二氧化碳和水,是对“获取能量”这种行为的两种不同的实现机制

在领域模型中,往往在领域对象基类上以抽象方法的形式定义行为,而在不同的子类上分别实现该抽象方法,提供该行为的不同实现机制。另一种可能是以接口的形式定义行为,而由具体的领域对象提供该行为的实现机制。


更进一步的信息请参考《第二章 领域建模:识别对象、关系和职责》

Copyright © yyang.io 2016 all right reserved,powered by Gitbook该文件修订时间: 2022-01-04 16:46:41

results matching ""

    No results matching ""