完整课程购买
本人十年大厂经验,整理技术资料不易, 完整详细文章关注公众号,后续还会有免费学习资料
想象一下,我们的网约车系统就像一个大城市,这个城市最初只是一个小镇,随着时间的推移,它迅速发展,人口增长,商业繁荣。但是,随着城市规模的扩大,城市规划开始出现问题,道路变得拥堵,居民区和工业区混杂在一起,管理也变得复杂和低效。这就是我们的系统需要重构的原因,我们需要一个更好的城市规划来解决这些问题。
在这个城市规划中,DDD就像是一位经验丰富的城市规划师。它不仅仅关注建筑本身,更关注的是城市的功能布局和居民的生活质量。城市规划师首先会深入了解城市的每个角落,识别出城市中的关键活动区域,比如商业中心、居民区、工业区等,这些就像是DDD中的子域。
接着,城市规划师会用一条条边界把这些区域划分开来,确保每个区域的功能清晰,互相之间不会干扰,这就是限界上下文的概念。限界上下文帮助我们确保每个区域(或者说微服务)都在一个团队的管理能力范围之内,避免了过大的微服务导致的管理混乱。
然后,城市规划师会考虑不同区域之间的交通流动,设计道路和公共交通系统,确保城市的运转高效顺畅。这就像是DDD中的上下文映射图,它帮助我们设计微服务之间的交互和依赖关系。
在具体的实施过程中,城市规划师会根据不同区域的特点,设计出适合的建筑和设施。比如,商业中心可能需要高楼大厦,而居民区则需要绿化和学校。在DDD中,这就是设计聚合、聚合根、实体和值对象的过程,它们共同构成了微服务内部的结构。
最后,城市规划师会监督整个建设过程,确保每个部分都按照规划进行,这就是DDD在实现层面的分层架构设计,确保系统的每个部分都各司其职,高效协作。
通过这样的城市规划,我们的网约车系统城市变得更加有序和高效,居民(用户)的生活质量得到提升,城市的吸引力也大大增加。这就是DDD在系统重构中的价值,它帮助我们构建一个更加清晰、高效和可维护的系统。
核心思想与一般方法
- 领域与子域:领域是指组织的业务范围和做事方式,而子域是领域的一个细分部分,如用户、订单等。通过将领域拆分为多个子域,可以更具体、更清晰地进行分析和设计。
- 限界上下文:限界上下文是对业务领域范围的描述,它定义了系统的子系统或模块的边界。通过识别强相关的子域并将其组合,可以形成限界上下文。
- 上下文映射图:用于设计不同限界上下文之间的交互和合作。在实践中,限界上下文通常被设计为微服务,上下文映射图则定义了微服务之间的依赖关系。
应用到Udi网约车系统的重构
- 业务领域分析:通过头脑风暴等方法,收集领域内的事件和命令,并识别出对应的实体。
- 实体关系图:基于核心实体模型,绘制实体之间的关系图。
- 场景活动图:针对不同的业务场景,绘制活动图,并根据高内聚原则调整功能逻辑,使泳道(限界上下文)更加清晰合理。
- 限界上下文设计:结合团队职责和微服务重用性等因素,对泳道图进行调整,形成最终的限界上下文。
- 微服务设计:根据限界上下文设计微服务架构,包括聚合、聚合根、实体、值对象等。
- 实现层面:设计分层架构,包括聚合根对象、领域服务层、应用服务层和接口层。
总结与思考
文章最后提供了一个DDD重构的路线图,包括头脑风暴、设计限界上下文、微服务设计等六个步骤。同时,提出了几个思考题,鼓励读者思考DDD的最大价值和如何成功落地DDD。