☰
领域驱动设计笔记
2026/10/21 1:10:15 网站建设 项目流程

柔性设计

上下文

BOUNDED CONTEXT限定模型的应用范围

CONTEXT MAP画出了上下文的范围,并给出了CONTEXT以及它们之间联系的总体视图

CONTINUOUS INTEGRATION把一个上下文中 的所有工作足够频繁地合并到一起,并使它们保持一致,以便当模型发生分裂时,可以迅速发现并纠正问题。包含两个级别的操作,模型概念集成,实现的集成。

SHARED KERNEL通常是core domain, 或是一组,generic subdomain,也可能二者兼有,它可以是两个团队都需要的任何一部分模型。使用shared kernel的目的是减少重复,并使两个子系统之间的集成变得相对容易一些。

CONFORMIST模式类似于SHARED KERNEL,是应对与一个对合作不感兴趣的团队进行集成。

精炼

大型结构

领域驱动设计思维导图

一个有界上下文分层,主要是为了关注点分离,满足内聚性要求

  • 接口层
  • 应用层
  • 领域层:包含领域模型以及与之相关的设计元素的表现,由业务逻辑的设计与实现组成
  • 基础设施层

通过依赖反转原则层之间依赖关系为

领域层不依赖基础设施层

领域内职责层分层

  • 决策层
  • 策略层
  • 作业层
  • 潜能层

service需要满足

  • 操作不是属于实例或者值对象的自然组成部分
  • 接口是根据领域模型的其他元素定义的
  • 无状态
服务可作为独立接口,也可以不用
聚合:是一组相关对象的集合,,主要有
  • 根:一个特定的实体
  • 边界:定义聚合的内部都有什么

其模式意义

  • 封装业务完整性:聚合内对象的状态始终符合规则;

  • 降低耦合:聚合外通过聚合根访问,避免直接依赖;

  • 简化协作:应用服务只需编排聚合根的方法,无需关心内部细节。

聚合使用领域服务的黄金法则:
  1. 尽量避免:聚合应自包含,优先将服务调用上移到应用层
  2. 若必须用,服务必须无状态、纯函数:仅用于计算/验证,无 I/O
  3. 通过方法参数流入:不持有服务成员变量
  4. 不访问仓储或基础设施:所有外部对象由调用方提供
  5. 保持聚合的“纯度”:领域模型应可脱离框架运行

聚合优先使用标识符来引用其它聚合或者实体

领域事件管理

  1. 领域层发起领域事件:优先在聚合根,跨聚合协作时由领域服务
  2. 应用层协调发布事件
  3. 基础设施层实现发布事件
  4. 领域事件监听器放在应用层来处理
聚合管状态,服务管协作,应用来编排,边界要清晰
在区分核心域,支撑子域,通用子域时,每个子域相当于一个边界上下文,每个子域需要分层(应用层,领域层,基础设施层),基础设施层可简化为领域层,基础设施层,其中领域层主要定义抽象接口,基础设施层实现抽象接口

战术中的模块相当于边界上下文内的逻辑边界

COLA

Clean Object-oriented and Layered Architecture,整洁面向对象分层架构,是一套由阿里巴巴提出的架构规范与代码骨架,旨在解决“DDD理论如何转化为可落地的代码结构”问题。它将DDD的核心思想(如领域分层、单一职责)与整洁架构(Clean Architecture)、六边形架构(Hexagonal Architecture)融合,形成“分层明确、依赖倒置、领域聚焦”的工程实践体系。

其有四大设计原则

  1. 分层隔离:用明确的层次划分“做什么”(领域层)与“怎么做”(其他层)
  2. 依赖倒置:高层模块(应用层、领域层)不依赖低层模块(基础设施层),而是依赖抽象
  3. 领域聚焦:所有业务逻辑(如聚合协作、领域服务)必须放在领域层,其他层仅做“辅助”
  4. 整洁编码:每层遵循单一职责(SRP)、开闭原则(OCP),拒绝“上帝类”

其四层结构及职责

  1. 适配层:处理输入输出(如REST、RPC、MQ),转换外部请求为领域层可理解的命令/查询
  2. 应用层:用例编排(Orchestration):调用领域层组件、管理事务、返回DTO
  3. 领域层:业务逻辑核心,封装聚合、实体、值对象、领域服务(跨聚合协作),包含聚合(Aggregate)、领域服务(Domain Service)
  4. 基础设施层:提供技术支撑,仓储实现、消息发送、缓存、数据库访问

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询