柔性设计
上下文
BOUNDED CONTEXT限定模型的应用范围
CONTEXT MAP画出了上下文的范围,并给出了CONTEXT以及它们之间联系的总体视图
CONTINUOUS INTEGRATION把一个上下文中 的所有工作足够频繁地合并到一起,并使它们保持一致,以便当模型发生分裂时,可以迅速发现并纠正问题。包含两个级别的操作,模型概念集成,实现的集成。
SHARED KERNEL通常是core domain, 或是一组,generic subdomain,也可能二者兼有,它可以是两个团队都需要的任何一部分模型。使用shared kernel的目的是减少重复,并使两个子系统之间的集成变得相对容易一些。
CONFORMIST模式类似于SHARED KERNEL,是应对与一个对合作不感兴趣的团队进行集成。
精炼
大型结构
领域驱动设计思维导图
一个有界上下文分层,主要是为了关注点分离,满足内聚性要求
- 接口层
- 应用层
- 领域层:包含领域模型以及与之相关的设计元素的表现,由业务逻辑的设计与实现组成
- 基础设施层
通过依赖反转原则层之间依赖关系为
领域层不依赖基础设施层
领域内职责层分层
- 决策层
- 策略层
- 作业层
- 潜能层
service需要满足
- 操作不是属于实例或者值对象的自然组成部分
- 接口是根据领域模型的其他元素定义的
- 无状态
- 根:一个特定的实体
- 边界:定义聚合的内部都有什么
其模式意义
封装业务完整性:聚合内对象的状态始终符合规则;
降低耦合:聚合外通过聚合根访问,避免直接依赖;
简化协作:应用服务只需编排聚合根的方法,无需关心内部细节。
- 尽量避免:聚合应自包含,优先将服务调用上移到应用层
- 若必须用,服务必须无状态、纯函数:仅用于计算/验证,无 I/O
- 通过方法参数流入:不持有服务成员变量
- 不访问仓储或基础设施:所有外部对象由调用方提供
- 保持聚合的“纯度”:领域模型应可脱离框架运行
聚合优先使用标识符来引用其它聚合或者实体
领域事件管理
- 领域层发起领域事件:优先在聚合根,跨聚合协作时由领域服务
- 应用层协调发布事件
- 基础设施层实现发布事件
- 领域事件监听器放在应用层来处理
战术中的模块相当于边界上下文内的逻辑边界
COLA
Clean Object-oriented and Layered Architecture,整洁面向对象分层架构,是一套由阿里巴巴提出的架构规范与代码骨架,旨在解决“DDD理论如何转化为可落地的代码结构”问题。它将DDD的核心思想(如领域分层、单一职责)与整洁架构(Clean Architecture)、六边形架构(Hexagonal Architecture)融合,形成“分层明确、依赖倒置、领域聚焦”的工程实践体系。
其有四大设计原则
- 分层隔离:用明确的层次划分“做什么”(领域层)与“怎么做”(其他层)
- 依赖倒置:高层模块(应用层、领域层)不依赖低层模块(基础设施层),而是依赖抽象
- 领域聚焦:所有业务逻辑(如聚合协作、领域服务)必须放在领域层,其他层仅做“辅助”
- 整洁编码:每层遵循单一职责(SRP)、开闭原则(OCP),拒绝“上帝类”
其四层结构及职责
- 适配层:处理输入输出(如REST、RPC、MQ),转换外部请求为领域层可理解的命令/查询
- 应用层:用例编排(Orchestration):调用领域层组件、管理事务、返回DTO
- 领域层:业务逻辑核心,封装聚合、实体、值对象、领域服务(跨聚合协作),包含聚合(Aggregate)、领域服务(Domain Service)
- 基础设施层:提供技术支撑,仓储实现、消息发送、缓存、数据库访问
github地址
领域驱动设计:软件核心复杂性应对之道
运输例子的模型图
Itinerary:行程安排类(航线)
Voyage:旅行类(航程)接口
接口层
- CargoAdminController
BookingServiceFacade:实现类为BookingServiceFacadeImpl
BookingServiceFacadeImpl:其依赖有
应用层
BookingService
领域层
LocationRepository
CargoRepository
VoyageRepository
CargoTrackingController:其依赖有
领域层
CargoRepository
HandlingEventRepository
应用层
HandlingEventService
实现类HandlingEventServiceImpl:依赖
领域层
HandlingEventRepository
HandlingEventFactory
应用层
ApplicationEvents
CargoInspectionService
实现类CargoInspectionServiceImpl:依赖
领域层
CargoRepository
HandlingEventRepository
应用层
ApplicationEvents
BookingService
实现类BookingServiceImpl:依赖
领域层
RoutingService
CargoRepository
LocationRepository
ApplicationEvents
领域层
- RoutingService
XXRepository
基础设施层
CargoHandledConsumer:依赖
应用层
CargoInspectionService
HandlingEventRegistrationAttemptConsumer:依赖
应用层
HandlingEventService
JmsApplicationEventsImpl:依赖
应用层
ApplicationEvents
ExternalRoutingService:依赖
领域层
RoutingService
XXRepositoryImpl:依赖
领域层
XXRepository