5-3 DDD之战略设计
一、战略和战术的区别
战略是目标和方向,战术是具体方法论
同时战略和战术又是相对的,战略总是比战术高一个维度。
二、DDD的诞生和发展
三个重点:
- 领域专家参与
- 子域的划分
- 通过设计模式,将领域知识注入设计模型中
DDD是指导思想,微服务是实现方式。
统一语言(财务的订单与销售的订单与开发的订单,由于关注点不同会是不同的概念,)
贫血模型不适合DDD,(object只有get和set)
领域划分的原则:
image.pngx->业务和别人不同的程度
y->商业逻辑复杂度/难度
image.png
为什么要使用DDD?
image.png三、DDD限界上下文
何为限界上下文
限界上下文是一个业务概念
每个都将具有自己的(导致的结果就是他们的实现要分开去实现,每个界限上下文都有自己的aggregate,比如用户的订单和商家的订单,需要通过不同的entity(用户aggregate下的entity和商家aggregate下的entity)去实现)
Bounded context和Subdomain的区别
他们是problem和solution的关系。
Bounded context 是解决问题;同时它是沟通层面的(使用统一语言来沟通的)。
Subdomain 是提出问题;同时它是针对项目领域而已,将复杂的大问题拆分成小问题
Bounded contexts可能跨多个subdomain(比如:运营部门有售前和售后,售前售后分别有自己的子域,但两个子域同时属于运营这个限界上下文),当然一个Bounded contexts可以只包含一个subdomain
Bounded context和组织的关系
一般情况下Bounded context和部门相对应,它属于一个业务概念(可以统一语言来沟通)
四、如何开发统一语言
白板+便签纸
事件风暴
Hands-On MODELER(要求架构师能够写代码)
模型即设计,设计即编码
五、DDD复杂系统应对
大部分技术人员的思维:制造复杂性来彰显技术的重要性。
DDD的思维:通过战略设计来减轻战术实现的复杂性。(所以简单系统并不适合使用DDD)
image.png
分层 | 英文 | 描述 |
---|---|---|
表现层 | User Interface | 用户界面层,或者表现层,负责向用户显示解释用户命令 |
应用层 | Application Layer | 定义软件要完成的任务,并且指挥协调领域对象进行不同的操作。该层不包含业务领域知识。 |
领域层 | Domain Layer | 或称为模型层,系统的核心,负责表达业务概念,业务状态信息以及业务规则。即包含了该领域(问题域)所有复杂的业务知识抽象和规则定义。该层主要精力要放在领域对象分析上,可以从实体,值对象,聚合(聚合根),领域服务,领域事件,仓储,工厂等方面入手 |
基础设施层 | Infrastructure Layer | 主要有2方面内容,一是为领域模型提供持久化机制,当软件需要持久化能力时候才需要进行规划;一是对其他层提供通用的技术支持能力,如消息通信,通用工具,配置等的实现; |
六、上下文映射关系(context Maps)
上下文映射有助于理解整个项目,能够显示不同的绑定上下文之间的关系。
同时理解绑定上下文之间的关系有利于正确的构建域模型
image.png
九种关系(可以自定义,提前去约定)
image.png
作业:实现一个战略设计图
网友评论