DDD领域建模与架构设计
2021-11-10 09:40:32 172 举报
AI智能生成
领域驱动设计(DDD)是一种软件开发方法,它关注于核心领域和领域逻辑的实现。在DDD中,领域模型是一个重要的概念,它是一个反映业务规则和业务知识的模型。架构设计则是指将领域模型转化为可执行的软件系统的过程。 在DDD中,领域专家、开发人员和利益相关者共同参与领域模型的创建和维护。通过不断地与领域专家交流,开发人员可以更好地理解业务需求,并将这些需求转化为可执行的软件系统。 总之,DDD领域建模与架构设计是一种关注于核心领域和领域逻辑实现的软件开发方法。它强调与领域专家合作,以创建一个反映业务规则和业务知识的领域模型,并将其转化为可执行的软件系统。
作者其他创作
大纲/内容
DDD有什么作用?
简化设计
降低维护成本
提高软件交付速度
DDD适用于什么场景?
软件核心复杂性应对之道
新项目该不该用DDD?
领域建模
为解决场景下的问题而形成的一套模型,然后使用这套模型来解决业务问题
领域发现
事件风暴
四个关注点
- 事件:某个动作的结果
- 属性:事件的输入、输出
- 命令:某个动作
- 实体:命令的触发者
谁(实体)使用什么(输入)做了什么(命令、动作)
产生了什么(输出)影响了什么(事件)
产生了什么(输出)影响了什么(事件)
四色建模法
使用4种颜色(对象)用于问题分析建模
- 时标型(Moment-Interval)对象:具有可追溯性的记录运营或管理数据的时刻或时段对象,用粉红色表示;
- PPT(Party/Place/Thing)对象:代表参与到流程中的参与方/地点/物,用绿色表示;
- 角色(Role)对象:在时标型对象与 PPT 对象(通常是参与方)之间参与的角色,用黄色表示;
- 描述(Description)对象:对 PPT 对象的一种补充描述,用蓝色表示。
分析的五个步骤
- 找到溯源事件
- 确定时标型对象
- 找到周围的PPT对象
- 找到角色
- 补全描述对象
领域建模
第一步:统一语言,梳理业务
- 描绘需求或问题本身
- 不断梳理业务
- 提炼出核心的领域模型
第二步:识别聚合、聚合根
如何识别聚合与聚合根?
一个Bounded Context(限界上下文)可能包含多个聚合,每个聚合都有一个根实体,叫做聚合根;
一个Bounded Context(限界上下文)可能包含多个聚合,每个聚合都有一个根实体,叫做聚合根;
如何进行关联?
- 聚合根到聚合根:通过ID关联
- 聚合根到其内部的实体:直接对象引用;
- 聚合根到值对象:直接对象引用;
聚合的几个设计原则:
- 聚合是用来封装真正的不变性,而不是简单的将对象组合在一起
- 聚合应尽量设计的小,尽可能小的拆分,可以避免重构,重新拆分
- 聚合之间的关联通过ID,而不是对象引用
- 聚合内强一致性,聚合之间最终一致性
第三步:划分限界上下文
架构设计
跨库关联查询解决方案
方案一:数据冗余
以空间换时间
方案二:数据补填
结合Wrapper设计模式,一般在Dao层实现数据聚合
以空间换时间
方案二:数据补填
结合Wrapper设计模式,一般在Dao层实现数据聚合
CQRS与Event Sourcing
CQRS(Command Query Responsibility Segregation)
命令查询职责分离
命令查询职责分离
Event Sourcing事件溯源
通过事件来管理领域对象的生命周期,事件即领域对象已发生的事实,只增不改
通过事件来管理领域对象的生命周期,事件即领域对象已发生的事实,只增不改
事件到底如何影响一个领域对象的状态的呢?
事件是只会增加不会修改
一个事件就是表示一个事实,事实是不能被磨灭或修改的
一种支持读写分离的演化
领域驱动架构
整洁架构
整洁架构核心思想:
通过适配器层解耦业务层与技术框架层代码
通过适配器层解耦业务层与技术框架层代码
六边形架构
六边形架构是微服务设计的基础
清晰架构
融合了DDD、整洁架构、CQRS……
曾在高水准的平台生产代码中应用,
其中一个是拥有数千家遍布全球的网上商店的 SaaS 电子商务平台,
另一个是已经在两个国家上线的市场,拥有可以每月处理超过两千万条消息的消息总线。
曾在高水准的平台生产代码中应用,
其中一个是拥有数千家遍布全球的网上商店的 SaaS 电子商务平台,
另一个是已经在两个国家上线的市场,拥有可以每月处理超过两千万条消息的消息总线。
回顾
领域建模
领域发现常用的两种方法:
- 事件风暴
- 四色建模法
- 第一步:统一语言,梳理业务
- 第二步:识别聚合、聚合根
- 第三步:划分限界上下文
架构设计
跨库关联查询常用的两种解决方案:
CQRS与EventSourcing:
领域驱动架构:
关注领域模型,围绕业务领域展开
整洁架构:
通过适配器层解耦业务层与技术框架层代码
六边形架构:
微服务设计的基础
清晰架构:
融合了DDD、整洁架构、CQRS……
- 数据冗余
- 数据补填
CQRS与EventSourcing:
- 命令查询职责分离
- 通过事件来管理领域对象的生命周期,事件即领域对象已发生的事实,只增不改
领域驱动架构:
关注领域模型,围绕业务领域展开
整洁架构:
通过适配器层解耦业务层与技术框架层代码
六边形架构:
微服务设计的基础
清晰架构:
融合了DDD、整洁架构、CQRS……
致谢
公众号:架构师修行录,关注回复【DDD】送你一份领域建模的实际案例
0 条评论
下一页