领域驱动模型设计(DDD:Domain-Driven Design)

参考:https://zhuanlan.zhihu.com/p/101592594
领域驱动模型设计(DDD:Domain-Driven Design)

边界是核心

核心思想:对边界的划分与控制

问题空间

  • 第一重边界:
    目标(WHY):为了解决问题
    聚焦(WHAT):划定问题空间(确定核心子领域、通用子领域与支撑子领域)
    HOW:确定项目的愿景与目标

解决方案空间

  • 第二重边界:
    目标(WHY):为了边界内外可以形成两个不同的世界
    聚焦(WHAT):限界上下文
    HOW:外部世界的规则是契约、通信以及系统级别的架构风格与模式,内部世界的规则是分层、协作以及类级别的设计风格与模式

  • 第三重边界:
    目标(WHY):为了隔离业务复杂度与技术复杂度
    聚焦(WHAT):基础设施层、应用层与领域层之间的隔离
    HOW:将领域层作为整个系统稳定而内聚的核心,是领域驱动设计的关键特征,即分离变与不变

  • 第四重边界:
    目标(WHY):为了维持领域模型绝对的稳定性
    聚焦(WHAT):聚合
    HOW:聚合设计原则要求聚合之间通过ID进行关联

这四重边界如下图所示:


领域驱动模型设计(DDD:Domain-Driven Design)_第1张图片
image

具体实施:

  • 三大纪律

    • 领域专家与开发团队工作在一起
    • 领域模型必须遵循统一语言
    • 时刻坚守四重设计边界
  • 八项注意

    • 子领域与限界上下文不要混为一谈
    • 一个限界上下文不能由多个团队开发
    • 跨进程协作通过远程服务,进程内协作通过应用服务
    • 保证领域分析模型、领域设计模型与领域实现模型的一致
    • 不要将领域模型暴露在应用层之外
    • 不要让数据模型干扰领域模型的设计
    • 聚合之间只能通过聚合根ID引用
    • 聚合不能依赖访问外部资源的网关

具象(什么是领域驱动设计?)

关键准则

领域是应用程序化的对象领域(例如:在库管理)。在域驱动设计中,主要前提是【应用程序的本质是领域】。聚焦在领域内而不是领域外的对象。
“领域模型”的对象模型在领域驱动设计中起着重要的作用。领域模型是领域中存在的概念的抽象(例如:库存管理中“仓库”或“移动”)。领域模型是对象的集合。领域中存在的所有基本行为(业务逻辑)都被建模成领域模型的职责。更具体地说,将所有行为建模成一个对象的责任或多个对象的交互。在领域驱动设计中,领域模型是应用程序开发的起点和基础。
【基本准则】

  • 领域是应用程序的本质
  • 使用从领域知识派生的通用语言;普遍存在的语言是目标领域中使用的术语的集合,为了消除歧义和重复。
  • 使用通用语言进行团队交流,文档书写,领域模型类和方法名称,服务名称等的定义。
  • 迭代开发的同时,保持领域模型,使通用语言和实现之间的一致性和可追溯性成为可能。

[补充准则]

  • 灵活运用模型驱动开发,面向对象技术,敏捷开发方法。然而不会像分析模型、设计模型那样,分离模型。使用一个模型。
    一言以蔽之,所谓领域驱动模型就是聚焦【领域中心】的面向对象的开发方法。

  • 基本上是面向对象的。

  • 迭代流是模型驱动的。

  • 开发过程是一种敏捷方法。

要开始使用域驱动的设计,需要了解三种方法的知识为前提:面向对象,模型驱动,敏捷开发。模型驱动和敏捷需要一定程度的知识来理解该概念,而面向对象则需要一些实践技能。如果您对这三种方法一无所知,而突然进入了DDD,领域驱动设计理解起来就不那么容易了。
但是,如果没有这三种技能,并不是不能开始。领域驱动设计使用迭代型方式进行实践。关于这三种技能,我认为通过这种重复来提高技能也不错。


借助https://www.wps.de/modeler/来划分领域

你可能感兴趣的:(领域驱动模型设计(DDD:Domain-Driven Design))