DDD内涵和外延都非常广泛,全面深入了解和掌握DDD需要关注的点较多,如果这些点散落开来,缺乏一根纽带串接起来,进而形不成一棵知识树,会导致很多人很难快速抓到重点和环环相扣的思路,再加上DDD中有很多关键细节需要实践才能掌握,而细节往往是魔鬼,丢失或混淆这些细节就很容易丧失了DDD的精髓。
很多人学习DDD很容易从入门到放弃,就是这个原因。
而通过完整的端到端案例来学习DDD往往可以起到事半功倍的效果,案例可以把完整的建模思路把散乱的点串接起来成为系统的DDD知识树,非常适合DDD的理解、学习和记忆。
本案例是第一课,后续持续推出不同案例,供大家借鉴参考。
DDD建模的精髓在于分合二字(如下图),这也是把DDD知识树贯穿起来的线索。
从上图可以看出,四个象限中每个关键部分都是先分后合,比如:
统一语言是把领域内所有名词动词/介词拆分出来,并消除歧义后合并同类项,典型的先分后合;
BC是把领域概念分离出来,归并到不同BC中去,也是先分后合;
6核心要素(聚合、实体、值对象)也是分离出核心要素后归并入不同模块和分层架构中,还是先分后合;
领域服务是把行为拆分出来重新组合成更内聚的业务行为,服务间调用委托到应用层处理,又是先分后合。
分层架构是把各层功能分开,然后内聚到功能独立的各层中。。。
以上等等无不是贯彻先分后合的理念,为了大家更好的应用好先分后合,这里我总结了DDD建模的九步法,这同时也是对DDD知识树线索的抽取。
另外再给出一个完整的DDD建模实例,把端到端建模的关键细节都显示表达出来,供大家参照建模。
古人云:熟读唐诗三百首不会作诗也会吟。通过案例学习是掌握细节的关键,往往可以事半功倍,做到照葫芦画瓢。
案例需求如下:
需求:
九步法:
Step 1 统一语言
Step 2 事件风暴
聚合一般和BC一一对应,通过事件风暴找到聚合,通过聚合探索BC
Step 3 划BC
Step 4 BC MAP
Step 5 子域
BC一般和子域一一对应,可以通过BC反过来探索子域。
有了子域就可以很容易划分核心子域和支撑子域,进而可以决策哪些内容是核心需要自己实现,哪些需要外购或外包来快速实现。
Step 6 核心要素
Step 7 分层架构
Step 8 模块
Step 9 六边形架构
小结,大家可以通过这个案例,全面体会下DDD建模的全步骤,该案例涵盖了业务流程、应用架构、软件架构、部署架构端到端开发流程,希望大家可以获得启发。
当然,上述每个步骤都有对应的方法论进行支撑,包括:名词动词法、use case法、事件风暴法、CRC法、四色建模法、边界建模法等,后续会把其中每个方法进行详细讲解,供大家参考。