DDD:四色建模

领域驱动设计系列

Posted by Shoukai Huang on March 22, 2020

四色建模

概念

四色建模法包括

  • 时标型(Moment-Interval)对象
  • PPT(Party/Place/Thing)对象
  • 角色(Role)对象
  • 描述(Description)对象

时刻-时间段原型

时刻-时间段原型:Moment-Interval Archetype

表示在某个时刻或某一段时间内发生的某个活动。使用粉红色表示,简写为MI。

这种对象表示那些在某个时间点存在,或者会存在一段时间的,这样的对象往往表示了一次外界的请求,比如一次询价(Quotation),一次购买(Sale),这样的对象表示的都是系统的价值所在,所以也是最重要的一类对象,一般用粉红色来表示。这样的对象一般都有一个起始时间和终止时间,以及一个唯一的标识号,用来唯一的标识这一次客户请求,比如PolicyNo.

这类对象具有两个特性。

  1. 第一是事实不可变性:记录了过去某个时间点或时间段内发生的事实。
  2. 第二是责任可追溯性:记录了管理者关注的信息。

参与方-地点-物品原型(Part-Place-Thing Archetype)

参与方-地点-物品原型:Part-Place-Thing Archetype

表示参与某个活动的人或物,地点则是活动的发生地。使用绿色表示。简写为PPT。

这种对象往往表示的是一种客观存在的事物,例如:人,组织,产品,配件等等,这些事物往往会在一种moment-interval 中扮演某个Role, 比如某个人会在一次购买中扮演Customer的角色,也可以在询价中扮演询价人的角色。这类对象第三重要,所以一般用绿色来表示。这类对象一般都有Name,Address等属性。

  • 参与方(Party):订单就需要有客户,否则不知道是谁下单,客户对象就是参与方。支付单据就需要有客户和账户,客户对象和账户对象就是参与方。
  • 地点(Place):配送单据就需要配送地址对象,否则就无法知道配送目的地。发布展会活动有地址对象,否则参展单位不知道在哪参会。明确需要地点信息的时标对象才需要地点对象。
  • 物品(Thing):订单需要商品对象,否则无法说明买家到底购买了哪些商品。作为业务流程中核心步骤的被操作对象,并为时标对象提供必要信息,以便于后续信息追溯。

角色原型(Role Archetype)

角色原型:Role Archetype

角色就是我们平时所理解的“身份”。使用黄色表示,简写为Role。

这种对象表示的是一种角色,往往由人或者物来承担,会有相应的责任和权利,一般一个moment-interval对象会关联多个Role,比如说一次询价(Quotation)涉及到两个Role, 询价人(Quoter)和询价的产品(Product for Quotation), 这类对象是除moment-interval对象外最重要的一类对象,一般用黄色来表示。这类对象一般都有一些被moment-interval对象请求的操作,用来完成它们的职责。

描述原型(Description Archetype)

描述原型:Description Archetype

表示对PPT的本质描述。Description是从PPT抽象出来的不变的共性的属性的集合。使用蓝色表示,简写为DESC。

这种对象一般是分类用或者描述性的对象,一般某个Thing,Place,Party会属于某个Description,主要用来表示一类事物,它的属性一般都是这一类事物都有的属性,这类对象一般用蓝色来表示。这类对象一般都有type,defaultValue等属性。

示例

闲鱼示例

闲鱼详情页是一个纯展示的页面,用一句话可以概括为,“详情页是包括:商品、卖家、买家、鱼塘、认证、互动等内容的信息聚合展示页” 。

这里我们使用四色原型建模法进行建模。上面的这句话最骨干的内容为:详情页是一个“信息聚合展示页”(瞬间事件)。

骨干内容定义好后,为了更好的描述详情页是什么,需要补充一些实体对象,详情页主要包含商品、卖家、买家、鱼塘这些实体(人-物-地点)。

在此基础上,进一步的进行抽象,用户实体中,有卖家、买家这个角色存在;鱼塘实体中,又有塘主、塘民角色存在(塘主也是塘民,所以塘主应该继承自塘民)。

再把一些描述信息放进去

基于如上模型设计,再进行后续类图设计,使用UML设计出最终类图

报名示例

请为乐乐老师设计一个软件工具的概念模型,能让乐乐老师方便地管理排课、报名和学员考勤,维护“小画笔”的正常运营。

用“四色建模法”进行建模

第一步:寻找要追溯的事件

  • 谁,在什么时候,为谁,报名了什么课程
  • 谁,在什么时候,为谁,支付了多少学费
  • 谁,在什么时候,上了什么课程

第二步:识别“时标对象”

按时间发展的先后顺序,用红色所表示的起到“追溯单据”作用的“时标”概念,如下图所示:

第三步:寻找时标对象周围的“人、地、物”[5]

在“时标”对象周围的用绿色所表示的“人、地、物”概念,如下图所示:

第四步:抽象“角色”[6]

在上图中插入用黄色所表示的“角色”概念,如下图所示:

第五步:补充“描述”信息[7]

在上图中插入用蓝色所表示的“描述”概念,如下图所示:

参考