在之前的文章中已经介绍了DDD相关的概念模式,DDD相关的业务技术架构,但是我们还没有找到一个核心的抓手去实践DDD。DDD的一个核心本质就是对业务建模,或者领域建模。说的很简单,但是做好确实很难,一个需求过来意淫几个实体对象就差不多解决了。深入看,全局看只在脑海中进行的建模实际上并不一定正确和稳定。因此我们需要找到正确的方法帮助对业务领域进行分析,得到建模结构,共享建模成果。
关于四色建模的概念我们可与追溯到90年代,起源于四色原型。四色原型是诞生于90年代,被广泛使用的一种系统分析方法。相关百度百科链接如下:https://baike.baidu.com/item/%E5%9B%9B%E8%89%B2%E5%8E%9F%E5%9E%8B/15403787?fr=aladdin
四色建模的目的是要对目标业务系统进行分析并通过不同的颜色标示出人,事,物,角色。通过四色建模或者四色原型得到四色原型图,每个原型图有属性和连接(关联 依赖等关系)两个部分组成。
简称:业务关键时刻,用粉红色或者淡红色表示。
说明:业务关键时刻所指的对象一般比较重要,这个时刻一般对应于一个事件和其产生的结果,这个对象经常会有一些关键字段,比如订单中的订单号。
简称:角色,用淡黄色或者浅黄色标示
说明:表示一种角色,由人或者物来承担,会有相应的责任和权利。
简称:人事物,用淡绿色或者浅绿色标示
说明:表示客观存在的事物,人,组织,产品或者配件等
简称:描述内容,用淡蓝色或者浅蓝色标示
说明:在建模中对上述颜色表示的内容进行解释,用于分类或者描述建模过程中产生的数据,事件,或者活动。
https://www.infoq.cn/article/xh-four-color-modeling/
https://www.cnblogs.com/happyframework/archive/2013/04/26/3043515.html
https://my.oschina.net/u/4587475/blog/4414138
https://insights.thoughtworks.cn/paper-pen-modeling/
限界笔纸法起源于thoughtworks,由thoughtworks大佬提出的基于四色建模的改进方法。
在“四色建模法”的“时标对象”的基础上确定"限界上下文”与“聚集”的概念,再使用“纸和笔来管理”的方法,力图在建模过程中实现“分而治之”,增强数据的完整性,并避免过度设计。
注:这里的时标对象就是业务发生时刻。聚集就是DDD中的聚合模式。
根据“业务发生时刻”的价值识别核心领域(core domain)
确定核心领域之间的依赖关系
用纸和笔画表格并写实例
注:这里的实例可以是业务用例,用户故事,或者业务发生时刻。
确定“聚合根 (AGGREGATE ROOT)”
以“人以群分”的原则抽取新的“聚合”
https://insights.thoughtworks.cn/paper-pen-modeling/
划分核心领域有助于“分而治之”:一旦确定了核心领域,限界上下文也就确定了,不同的限界上下文之间通过“翻译器”来彼此沟通并屏蔽干扰,这样就避免了“大泥球”的设计,并有助于演进到微服务架构。
“聚集根”有助于数据完整性:每个限界上下文都有一个“聚集根”的概念,外界对其下属概念的访问都必须通过它来进行,这样既方便定位职责,也有助于增强数据的完整性。
用“纸和笔”画恰好够用的概念有助于避免过度设计:每个限界上下文中要管理的概念,都是通过“倒退到没有电脑而用纸和笔的时代如何管理”来引导出来的,用纸和笔来记录,能促使人避免写过多的信息,而只写限界上下文中恰好够用的概念。
通过开一场事件风暴会议梳理领域内的核心要素。
核心要素有用户,聚合,策略,决策命令,读模型,外部系统,领域事件。
https://www.cnblogs.com/junzi2099/p/13058234.html
https://www.jianshu.com/p/797d96c1faab
https://www.infoq.cn/article/b7UGgkuYUgTEmRe5SQLg
事件风暴旨在创建和分享对域模型的共同理解;它不是设计文档,流程图,UML图,部署计划,体系结构图或与实现相关的任何其他内容的替代品。可以将其视为**低保真,**临时信息辐射器,用于与其他人共享和确认域模型。
基于用户故事(需求)建模,也叫用例建模法。
商品发布场景建模过程:
https://www.cnblogs.com/xishuai/p/ddd-product-design.html
这是一种相对传统的建模方式,通过一些核心的用例作为作为突破点我们很容易得到一些概念模型和领域上下文划分的依据。根据当前系统能力和模型做一些领域职能划分和迭代。
上面介绍了三种方式帮助进行面向对象建模,只有进行了正确且合适的建模才能找到现实世界到软件程序的合理映射,数据结构也才更加明确,这样对软件开发,迭代,分工合作都有一个很好的基础。这里先大概介绍一下三种建模方式大概是怎么样的,后续我将分别采用不同案例去使用这些建模方法。同时我也将充分结合网上的一些案例,争取展示出使用这些发方法进行建模的多个案例。欢迎关注公众号,敬请期待。