跳转到正文
宋柏成
返回

DDD 领域驱动设计

DDD 领域驱动设计

关于 DDD

领域驱动设计(Domain-Driven Design,DDD)是一种软件设计方法,是一种思想,它以领域为核心,将软件系统拆分为不同的领域,并在不同的领域中建立模型和规则。通过这种方式,可以提高软件系统的可维护性和可扩展性,并减少软件系统中的错误。

在我们以前的后端项目的开发过程当中,软件架构的设计往往是在项目开始之初就确立的,可是在实际的项目开发当中,我们往往发现,架构设计往往是在项目后期才逐渐完善起来的,这往往是因为项目初期对业务的理解不足,或者对软件架构的设计不够清晰,导致架构设计不够合理,最终导致软件系统的可维护性和可扩展性越来越差,而这个时期再开始考虑项目拆分的时候就会因为 MVC 架构各种复杂的调用关系而难以下手。

DDD 的出现就是为了解决这个问题,它将软件系统拆分为不同的领域,并在不同的领域中建立模型和规则,从而提高软件系统的可维护性和可扩展性,并减少软件系统中的错误,刚接触到一个新的领域可以引用事件风暴的方式。事件风暴(Event Storming)是一种由 Alberto Brandolini 在 2013 年提出的工作坊方法,旨在帮助团队在短时间内对一个复杂领域进行建模和理解,帮助跨职能团队通过讨论和协作,快速发现和识别领域中的关键事件和业务流程。

事件风暴

事件风暴的核心思想是通过可视化事件流来揭示业务领域中的重要行为和互动。以下是事件风暴的一些关键特点和步骤:

关键特点

  1. 高度协作:事件风暴强调团队成员之间的互动和协作,通常包括开发人员、业务专家、产品经理等不同角色。
  2. 快速迭代:通过快速生成和调整事件模型,团队能够在短时间内捕捉到领域的复杂性。
  3. 可视化:利用便利贴和白板等工具,将事件以可视化的方式展示出来,便于讨论和理解。
  4. 领域驱动:专注于业务领域中的实际事件和流程,而非技术实现细节。

步骤

  1. 准备工作:确定讨论的主题和范围,邀请相关领域的专家和团队成员,准备好便利贴、白板或大张纸。
  2. 标识事件:在白板上记录领域中的关键业务事件,每个事件用一张便利贴表示,事件通常以过去时态动词短语描述(例如,“订单已创建”)。
  3. 排列事件:将事件按照时间顺序排列,展示业务流程的先后顺序。
  4. 识别命令:识别触发这些事件的命令或操作(例如,“创建订单”),并将其添加到模型中。
  5. 添加参与者:识别执行这些命令的参与者(角色或系统),并将其添加到模型中。
  6. 讨论和细化:通过团队讨论,细化和调整事件模型,添加更多的细节和上下文。
  7. 识别聚合根和界限上下文:在详细讨论中,识别出领域中的聚合根和界限上下文,帮助进行更细化的领域建模。

通过事件风暴,团队可以在一个开放和互动的环境中,高效地探索和理解复杂的业务领域,进而为后续的设计和开发工作打下坚实的基础。

核心概念

借鉴思想

DDD 应该一直遵循高内聚低耦合的目标,可以借鉴以下原则:

  1. 单一职责原则:在领域模型中,每个模型都应该只有一个职责,即应该只有一个原因导致模型发生变化。
  2. 开闭原则:在领域模型中,应该尽量使用抽象和接口,而不是具体的实现,这样可以提高模型的可扩展性和可维护
  3. 依赖倒置原则:在领域模型中,应该尽量使用抽象和接口,而不是具体的实现,这样可以提高模型的可扩展性和可

四层架构

在 DDD 中,通常会使用四层架构来组织代码。这四层架构分别是:


分享这篇文章:

上一篇
日常工具(Mac 版)
下一篇
责任链模式