专业的编程技术博客社区

网站首页 > 博客文章 正文

DDD领域驱动设计(五)——如何学习领域驱动设计

baijin 2024-09-01 12:57:45 博客文章 5 ℃ 0 评论

本文选自《悟道领域驱动设计》一书的 1.2节。


1.2 如何学习领域驱动设计

在学习领域驱动设计前,要对其学习难点有清晰的认识。针对其学习难点,本书提供了一条行之有效地学习路线。

1.2.1 学习难点

1. 难以建立知识体系

领域驱动设计涉及许多新的概念和术语,如实体、值对象、聚合根、领域服务、工厂、仓储、领域事件等。这些概念和术语不仅需要记忆,还需要深入理解其含义和作用。

此外,领域驱动设计还涉及一些特定的设计模式和架构,从战略设计到战术设计,从经典四层架构到端口适配器架构等。知识的跨度比较大,初学者不清楚知识点之间的先后顺序,很难快速建立知识体系,导致无法整体上掌握领域驱动设计。

2. 案例有限

如前文所述,很难找到成功的开源项目案例。

3. 难以结合实际开发过程进行应用

实际开发中,很难孤立地仅仅使用领域驱动设计完成工作,通常需要结合许多的开发方法,例如设计模式、敏捷开发、测试驱动开发等。目前很少有这方面的成功经验。

1.2.2 学习路线

本书提供了学习领域驱动设计的路线,该学习路线如图 11所示。

该学习路线分为几个阶段,分别如下:

第一阶段,解决应用架构的问题。本书带领读者从经典的三层贫血架构出发,推导可以落地领域驱动设计的应用架构。之所以要自己推导,是希望读者掌握这个思维的过程,加深印象以便在实际中灵活应用。接下来关于领域驱动设计的知识,不管是战术设计还是战略设计,都可以按图索骥地将其在这个应用架构中进行实现。在这个应用架构中,要了解领域对象的生命周期,只有掌握了其生命周期,才能对领域模型在应用架构中的类型流转了如指掌。

第二阶段,掌握领域驱动设计的战术设计。这个阶段需要学习的战术设计相关的核心概念包括:实体、值对象、聚合/聚合根、领域服务、Repository、Factory等。掌握这些战术设计的概念,基本上就可以开发一些简单的应用了。

第三阶段,掌握使用领域驱动设计实现复杂业务逻辑的基本思路。这个阶段要如何使用设计模式、防腐层、规约模式等实现复杂业务逻辑,并将其应用在领域驱动设计的开发中。通过这个阶段的学习,读者已经可以使用领域驱动设计解决大部分的业务问题。

第四阶段,掌握领域事件和事件溯源。这个阶段首先需要学习幂等设计,幂等设计可以确保服务支持安全的重试,避免重复请求影响业务的正确性。在幂等的前提下,掌握如何建模领域事件并安全可靠地发布、订阅领域事件,以及如何实现CQRS和事件溯源。业界部分开发者对CQRS的理解是存在误区的,读者在CQRS的学习过程中需要关注概念的理解。本书针对事件溯源提供了3个可以运行的案例代码,这些案例代码没有依赖任何领域驱动设计框架,通过阅读这些案例,读者可以非常轻松地掌握事件溯源的原理和实现方案,案例的获取方式见本书前言。

第五阶段,需要掌握领域驱动设计下的一致性实现方案。这里的一致性包括聚合内的一致性以及跨聚合的一致性。在战术设计介绍Repository时,会涉及一些一致性的讨论,但是由于一致性实在太重要了,直接关系到业务操作结果的正确性,所以需要单独进行探讨学习。

第六阶段,学习领域驱动设计的战略设计以及领域建模。先学习战略设计,理解上下文、上下文映射以及子域的概念,之后学习事件风暴法进行领域建模。战略设计和领域建模之所以被放在靠后的阶段,是因为只有充分理解了领域驱动设计的战术设计,有了一定的知识储备,才能清晰地理解战略设计和领域建模。

第七阶段,综合实践阶段。领域驱动设计不是孤立的理论体系,不能脱离实际研发过程。本阶段的目标是掌握如何将领域驱动设计融入到其他开发理论中,例如如何提高研发效能、测试驱动开发、敏捷开发、C4架构模型等。研发效能章节的学习旨在提高开发效率,改变业界对领域驱动设计"笨重、慢"、糟糕、刻板的印象。其中涉及的知识包括脚手架、代码生成器、静态代码扫描、低代码等。敏捷开发章节的学习则帮助读者掌握敏捷开发理论,并将领域驱动设计与实际开发中的敏捷开发结合起来使用。C4架构模型这一章节的学习则帮助读者掌握架构可视化的技能,合理美观地表达架构设计思路。

第八阶段,实战案例阶段。直播带货和AIGC(尤其是ChatGPT)是目前业界最火爆的两个概念。本书针对这两个场景分别提供了代码案例。这两个案例完全采用本书的知识点进行实现,代码完全开源并且可以正常运行。通过实战案例阶段的学习,可以将繁杂的知识融会贯通,使领域驱动设计真正成为读者具有竞争力的技能。

根据该学习路线,本书领域驱动设计的知识体系全景图如图 1-2所示。


《悟道领域驱动设计》是我创作的一本关于领域驱动设计(Domain Dirven Design,DDD)的书,详细介绍了DDD的战术设计(实体、值对象、领域服务、聚合和聚合根、Repository、Factory、领域事件)、战略设计(限界上下文、上下文映射、子域)、CQRS、事件溯源等内容。

读者可访问ddd.feiniaojin.com阅读《悟道领域驱动设计》相关章节。

我创建了一个DDD交流群,欢迎加我微信“qinyujieup”,我邀请您加入,一起探讨、学习和落地DDD,群内不定期举行DDD以及其他技术分享,进群后也可以观看历史分享的录屏回放。

群内探讨的问题、读者反馈的问题,将会定期发布在公众号“悟道领域驱动设计”,欢迎关注。注:也可以关注公众号“悟道领域驱动设计”,发送消息“加群”。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表