作用

限界纸笔建模法可以在四色建模法后继续进行以下三项建模工作:

  1. 划分限界上下文,避免模型发展成“大泥球架构”。
  2. 强调“聚集根”的概念,更好地保证数据的完整性。
  3. 寻找“恰好够用”的概念,避免过度设计,降低所建模型的复杂性。

    优势

  4. 划分核心领域有助于“分而治之”:一旦确定了核心领域,限界上下文也就确定了,不同的限界上下文之间通过“翻译器”来彼此沟通并屏蔽干扰,这样就避免了“大泥球”的设计,并有助于演进到微服务架构。

  5. “聚集根”有助于数据完整性:每个限界上下文都有一个“聚集根”的概念,外界对其下属概念的访问都必须通过它来进行,这样既方便定位职责,也有助于增强数据的完整性。
  6. 用“纸和笔”画恰好够用的概念有助于避免过度设计:每个限界上下文中要管理的概念,都是通过“倒退到没有电脑而用纸和笔的时代如何管理”来引导出来的,用纸和笔来记录,能促使人避免写过多的信息,而只写限界上下文中恰好够用的概念。

    步骤

    第一步:根据“追溯单据”的价值识别核心领

    **

    第二步:确定核心领域之间的依赖关系

    **

    第三步:用纸和笔画表格并写实例

    **

    第四步:确定“聚合根”

    **

    第五步:以“人以群分”的原则抽取新的“聚合”

例子1

第一步:根据“追溯单据”的价值识别核心领域[9]
首先以“小画笔”绘画课外班的业务“追溯单据”为线索,列出这些追溯单据为乐乐老师所提供价值,并合并其中一些价值相同的单据。比如对于一个只有三间教室的小课外培训机构,只有交费成功的“报名”才视作有效报名。所以“报名登记表”和“交费纪录”可以合并。然后确定这些价值所对应的核心领域。如下表所示:
image.png

第二步:确定核心领域之间的依赖关系
排课、报名与签到三个核心领域的依赖关系如下所示:
排课 <—— 报名 <—— 签到
上面的箭头表示:“报名”需要依赖“排课”所提供的信息,而“签到”需要依赖“报名”所提供的信息。
第三步:用纸和笔画表格并写实例
先选择一个核心领域,然后开始在其所对应的“限界上下文”中,开始对其建模。假设时光回退100年,那时没有电脑,只有纸和笔。用纸和笔画表格并写实例的方法,来管理该核心领域的“恰好够用”的数据,来达成乐乐老师在此核心领域所期望的价值。
首先选择“排课”。下图是用纸和笔画出的表格,并有一条实例数据:
image.png

第四步:确定“聚集根”
给表中所有的列找一个“经理”来作为“聚集根”。这里选择“课程”作为“聚集根”,它是一种具有唯一标识(即有唯一的课程编号)的Entity[10]概念,然后把表中所有的列名都抄写到表下“聚集根”的右侧,并用括号括起来,如下图所示:
image.png

第五步:以“人以群分”的原则抽取新的“聚集”
观察所抄写的“聚集根”右侧所有聚集在一起的各个概念,提取出总是“一起玩儿”的多个概念,形成一个新的聚集,并确定这个新聚集的名字。比如,“上课时间”、“起始日期”、“次数”这三个概念总是一起出现,它们决定了这门课程的学时,所以就提取“学时”这个新聚集,并把这三个概念从“课程”右侧划掉。“学时”这个概念不需要有唯一标识,所以是Value Object[11]概念。它和“课程”是一对一的关系。用相同的方法可以提取“老师”这个新聚集,它是Entity概念,“课程”与它是一对多的关系。如下图所示:
image.png

对于那些只“自己单独玩儿”的概念,如“学费”、“教室”等,就先暂时放到“课程”这个聚集根下面,等随着将来业务演进出现了新的“能一起玩儿的伙伴”后,再提取新的聚集不迟。
至此,使用限界纸笔建模法对“排课”这个核心领域所进行的建模告一段落。下图是使用这种方法对“报名”这个核心领域所建的模型,“签到”核心领域的建模略去不讨论。
image.png**

参考链接

https://insights.thoughtworks.cn/paper-pen-modeling/