1.领域建模主要有两个目的
呈上:将知识可视化,准确、深刻地反映领域知识,并且在业务和技术人员之间达成一致; 启下:指导系统的设计和编码,领域模型应该能够比较容易地转化成数据库模式和代码实现。
2.领域建模的工具 - UML类图
领域模型是用领域模型图来表达的,通常用 UML 来画; DDD 中将领域对象又分成实体(entity)和值对象(value object) 通过画类图的方式进行领域建模。
3.初步识别实体
首先,你可以先假定每个领域名词都是一个实体
识别“一对一”关联
识别“一对多”关联
进行抽象
识别“自关联”
增加“约束”
识别“多对多”关联
最终形成领域模型如下
4.观点
为什么领域建模要由业务人员和技术人员一起协作完成呢?
- 知识传递:
- 技术同学说:我没太懂你到底想要个啥玩意儿
- 产品同学说:好,让我跟你再细说说
2.知识提炼
- 技术同学说:你讲的我大概都明白了,但是就感觉有些凌乱,东扯一下,西扯一下,还是有点迷糊
- 产品同学说:好,那我们再来梳理一下,有些点确实可以归归类啥的,可能更方便理解
3、可视化:
- 技术同学:嗯,你的需求我基本是了解了,要不我把我的理解画出来,跟你确认一下?
- 产品同学:好主意,那咱们一起来搞吧。
4、认知对齐:
- 技术同学:你看我画的这个,是那个意思哈,确定哈。 还有这个这个,是那个那个意思哈。
- 产品同学:对的对的,这个是对的。 不过,那个可能稍微再调整一下更符合实情业务情况。
5、统一语言:
- 技术同学:看来,咱们画这一波图,已经把需求的要点都囊括了哈。只是有些概念我感觉还是有点模棱两可,要不咱们再对一下,把这些概念的叫法给定死咯,这样我写代码的时候,也方便取名字。
- 产品同学:要得要得,我们再拉一个表吧,把所有的业务概念再罗列一遍,包括中文表达和对应的英文表达都敲定一下,以后咱们就以这个术语表为准来沟通。
5.总结与思考
通常在回答"怎样既准确又深刻地理解业务知识"问题时,对于研发人员,传统的回答可能是: 1)听一遍,按自己的理解复述一遍,获取反馈 2)系统化地梳理,使用业务知识结构化,实现完整性、一致性。 基于DDD的角度,其实是第2)个思路,通过DDD的事件风暴和领域建模,完整业务知识的系统化梳理。 再通过第1)思路,与业务人员进行反馈协作沟通,以及统一化语言。
学习来源:钟敬的《手把手教你落地 DDD》