4

DDD系列(一)基础定义

 2 years ago
source link: https://scncyangping.github.io/2022/03/03/ddd01/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
DDD系列(一)基础定义 - YaPiBlog

DDD是一种软件架构设计方法,并不定义软件开发过程 DDD利用面向对象的特性,以业务为核心驱动,而不是传统的数据库表驱动

  • 模型是对领域的抽象,建模是针对特定问题建立领域的合理模型
  • 复杂性来源于业务本身的复杂性和设计引入的额外复杂性
  • 领域驱动设计通过分解模型和模型驱动设计控制复杂性

解析: 所谓模型即是对特定领域内事物的抽象。比如:人民币。财务情景下,只需抽象为币种和金额。印刷厂情景下,需要 抽象为币种、编号、金额、批次等。在防伪的情景下,需要抽象为币种、金额、防伪材料等。不同情景下需要抽象的内容不一样(第一点)

若现在有一个系统,同时具有财务、印刷、防伪的功能。此时,若用传统面向对象方式建模,就会使人民币这个模型变得很臃肿。随着 业务功能的增加,复杂性不断增加(第二点)

领域驱动设计会通过子域和边界重新分解模型,并提供防腐层来控制复杂性。

面向对象和敏捷与DDD的关系

OOAD (面向对象设计分析) 和 DDD:

区别:OOAD没有战略分析;DDD通过战略设计划分领域和模型。OOAD仅仅用对象描述世界;DDD描述更细致 联系:都是建模和设计的思想

敏捷开发和DDD:

区别:软件开发原始模式是将任务划分成很多个步骤,如:设计、实现、测试等,每个步骤的输出是下一个步骤的输入。这种方式前期的错误在很后期才会发现。 敏捷开发将任务划分为很多个小的任务,每个任务是一个小的冲刺。所以敏捷开发关注流程,DDD关注建模设计方法。

  1. 挖掘用户故事
  2. 建立通用语言,统一描述,比如售卖机,有的又叫做贩卖机。这个时候需要统一名称。
    1. storytelling
    2. 文字、图、代码
  3. 战略设计 - DDD中对问题空间和解决方案空间进行分解的过程,目的是分解模型以控制复杂性,是DDD与传统建模和设计方法的核心区别之一
    1. 限界上下文
    2. 上下文映射
  4. 战术设计
    1. 实体和值对象
    2. 工厂和仓库
  1. 领域专家(通常为产品经理)

常用建模方法

  • Domain Storytelling 领域故事陈述法
  • Event Storming 事件风暴法
  • 4C 四色建模法


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK