DDD之领域模型泛化的抽象机制

529 阅读2分钟

1.泛化的概念

泛化是领域建模技能由初级水平迈向中、高级水平的门槛。

领域建模层面的泛化,大体上相当于面向对象设计中的继承和多态。

比如,需要表达的逻辑:项目和子项目都是可以报工时的“东西”。而一条工时记录,必须要关联到一个这种“东西”上。

可以把这个逻辑再说一遍:项目和子项目统称为“工时项”,一个工时项可以关联 0 到多条工时记录,一条工时记录必须关联且仅关联一个工时项。

如下图,空心三角,就表示前面说的“统称”的关系,由于工时项的含义比起项目和子项目要更“广泛”,所以这种关系在 UML 里叫做“泛化”(generalization)。这时候,工时项称为项目和子项目的“父类”,而项目和子项目称为工时项的“子类”。

image.png

2.泛化关系的几个自然语言说法

泛化关系转换成自然语言,还可以有另外三种说法。

2.1“分类”关系

例如生物可以分成动物和植物,动物又可以分成哺乳动物和爬行动物等等。

2.2“是一个”(is-a)的关系。

一个动物是一个生物,一个植物也是一个生物。

2.3共性 / 个性的关系

项目和子项目具有“共性”,也就是都能报工时。把这个共性的概念提取出来,称为工时项。另一方面,项目和子项目又具有“个性”,也就是两者有差别,比如说,要为项目分配项目经理,而子项目则不需要。

总的来说,泛化是一种强大的抽象机制,能够同时表现出不同对象间的共性和个性。 通过找出共性,减少重复,对业务复杂度做减法。


此文章为2月Day11学习笔记,内容来源于极客时间《手把手教你落地 DDD》