美文网首页
领域驱动模型设计(DDD:Domain-Driven Desig

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

作者: 泥人冷风 | 来源:发表于2020-08-26 10:06 被阅读0次

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

    边界是核心

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

    问题空间

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

    解决方案空间

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

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

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

    这四重边界如下图所示:


    image

    具体实施:

    • 三大纪律

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

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

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

    关键准则

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

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

    [补充准则]

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

    • 基本上是面向对象的。

    • 迭代流是模型驱动的。

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

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


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

    相关文章

      网友评论

          本文标题:领域驱动模型设计(DDD:Domain-Driven Desig

          本文链接:https://www.haomeiwen.com/subject/ehkxsktx.html