icql

DDD简介

领域驱动设计(Domain Driven Design,DDD) Eric Evans 编著的《领域驱动设计》



软件架构

1)单机架构: 面向过程的设计方法,围绕DB设计和开发

2)集中式三层架构 面向过程+面向对象的设计方法,接入层+逻辑层+数据访问层

3)分布式微服务架构 应用之间解耦,解决单体应用的扩展性和弹性伸缩能力

软件架构演进



微服务设计

1)拆分

微服务怎么拆,拆的过小复杂度过高无法上线和运维,拆的过大和原来的单体应用没什么区别 借助DDD来拆分

2)设计过程

1)梳理业务操作(用例图) 2)对用例操作划分最小模块 3)对联系密切的最小模块进行限界上下文划分 4)限界上下文可以作为微服务边界,也可以合并多个限界上下文作为同一个微服务

微服务设计



DDD常见名词

1)领域、子域

领域:

DDD 的领域就是这个边界内要解决的业务问题域

子域:

领域可以进一步划分为子领域。我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围

2)核心域、通用域、支撑域

核心域:

决定产品和公司核心竞争力的子域 最核心的部分,这部分最好自己研发,如果资源有限,通用域和支撑域可以外包出去

通用域:

没有太多个性化的诉求,同时被多个子域使用的通用功能子域 例如:认证、权限等

支撑域:

既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域 例如:数据字典等

3)通用语言

在业务抽象或者后续实现时,使用通用的、统一的业务命名(中英文)

4)限界上下文

领域和各个子域的划分边界

5)实体、值对象

实体和值对象都是领域对象

实体:

业务实体对象,多个属性、操作或行为的载体

值对象:

一个没有标识符的对象,叫作值对象 属性集合

同一类型的值对象可以互相替换

实体和值对象

6)聚合、聚合根

聚合:

实体和值对象表征个体,聚合则相当于组织,包含一些紧密结合的实体和值对象

聚合根:

聚合中的一个实体,这个聚合中的负责人或根实体,类似主键的作用

7)领域事件

微服务内的领域事件:

聚合内,强一致性,DB事务保证 聚合外,基于事件的最终一致性,但是这样会比较复杂,建议也用DB事务保证

微服务间的领域事件:

利用消息中间件