第一部分 认识中台——微服务设计为什么要选择DDD
一、微服务拆分和设计的困境
微服务的粒度应该如何把握?微服务到底应该如何拆分和设计?微服务的边界到底应该在哪里?
微服务拆分困境产生的根本原因,就是不知道业务或应用的边界到底在什么地方。微服务设计第一步是先划分业务领域边界,然后在边界内构件业务领域模型,根据领域模型完成从单体应用到微服务的建设。
DDD的核心思想是从业务视角出发,根据限界上下文边界划分业务的领域边界,定义领域模型,确定业务边界。
二、为什么DDD适合微服务
DDD是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂性,并围绕业务概念构建领域模型来控制业务的复杂性,以解决软件难以理解,难以演进的问题。DDD不是架构,它是一种架构设计方法论,它通过业务边界划分将复杂业务领域简单化,划分出清晰的业务领域和应用边界,从而很容易实现微服务的架构演进。
2.1 DDD包括战略设计和战术设计两部分
- 战略设计:从业务视角出发,划分业务的领域边界,建立基于通用语言和业务上下文语义边界的限界上下文,构建领域模型。而限界上线文就可作为微服务拆分和设计的边界。
- 战术设计:从战术设计中会有聚合、聚合根、实体、值对象、领域服务、领域事件、应用服务和仓储等领域对象,这些领域对象会以代码的形式映射到微服务中,完成设计和系统落地。
2.2 DDD战略设计中的领域建模是发散到收敛过程,通常采用事件风暴工作坊方法
- 首先,针对业务领域,通过用例分析、场景分析和用户旅程分析等方法,尽可能全面地、不遗漏地梳理业务领域