为什么需要DDD
DDD到底是什么
思维编程方式,面向对象,战术设计,战略设计
概要设计域,通用语言,界限上下文
建模
依赖业务
领域层划分边界
战略设计到战术设计
聚合根,实体,值对象
核心域,支撑子域,通用子域
商品中心/订单中心/支付中心/物流中心
推荐/爬虫
权限/认证
根据关联业务拆分.而不是根据模块拆分
核心业务与边缘业务进行拆分
基于领域模型划分
业务需求变更划分
划分域团队化
通用语言
术语表
限界上下文
子域
基于电商系统按时间线发现限界上下文
上架--->浏览商品(下单)--->支付--->发货
ACL防腐层(适配)
多个上下文来进行协作
构建电商上下文关系映射图
销售核心领域
促销方式上下文
促销活动管理上下文
内容管理上下文
购买行为上下文
商品域(核心域)
商品上下文
促销活动管理上下文
用户上下文
支付上下文
订单上下文
物流上下文
事件风暴
商品加入购物车--->获取商品的基础信息--->权益信息--->锁定库存--->计算运费--->风控校验--->订单已创建(核心事件)--->支持事件--->发货调度--->仓库出库--->物流跟踪--->确认收货(是)--->签收成功
确认收货(否)--->发起售后--->售后审核--->退货入库--->库存更新--->售后状态变更--->支付信息查询--->退款成功
战略设计:领域分析模型
实体和值对象
entity(可识别)
一个实体是一个唯一的东西。并且可以在相当长的一段时间内持续的变化,我们可以对实体进行多次的修改。但是尽管经历了多次的修改,实体始终拥有唯一一个身份标识
valueobject(不变性和可替换性,值对象通常是用来度量和描述事物)
它度量或者描述了领域中的一件东西
它可以作为不变量
它将不同的相关的属性组合成了一个概念整体
当度量和描述改变时,可以用另外一个值对象予以替换
它可以与其他值对象进行相等性比较
它不会对协作对象造成副作用
充血模型
聚合和聚合根
聚合要满足业务规则
到底引用实体还是引用id
聚合生命周期一致
数据一致性
聚合根之前引用通过id
聚合根引用实体,直接引用对象
聚合根引用值对象,直接引用对象
领域事件
异步
DDD进阶
战术设计:领域设计模型
用例分析法和领域事件梳理
动词+业务梳理
createOrder
购物车加入商品
(订单)itemAdd
5w1h8c
性能
成本
事件
可靠性
安全性
合规性
技术性
兼容性
领域建模
名词+关系+属性
通用语言/划分域/划分限界上下文/梳理上下文的协作关系
uml用例图
uml关系图
uml时序图
战略设计
战术设计
用户层--->应用层--->领域层--->基础层
CQRS架构
新增修改和查询分离
新增修改(写入领域事件(mq))
六边形架构
内外六边形
规范