Malize's blog Malize's blog
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)

Malize

持续学习,持续成长
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • CIM

  • 代码规范

  • 前端基础

  • 微服务

  • Git

  • 数据库

  • DDD领域驱动

    • DDD是什么:为什么微服务设计要选择DDD
    • 领域、子域与限界上下文
    • 实体、值对象、聚合与聚合根
    • 领域事件:微服务解耦的关键
    • DDD分层架构与微服务架构模型
      • 一、DDD 四层架构
      • 二、严格分层:每层只调用它紧邻的下层
      • 三、依赖倒置:换数据库不再要命
      • 四、三层架构怎么演进到 DDD 分层
      • 五、整洁架构与六边形架构
        • 整洁架构(洋葱架构)
        • 六边形架构(端口适配器架构)
        • 三者对比:形不同,神相同
      • 六、架构演进:聚合是搬家的最小单位
      • 七、项目级微服务 vs 企业级中台微服务
      • 八、小结
    • DDD、中台与微服务的铁三角
    • 事件风暴与中台业务建模实战
    • DDD微服务代码模型设计
    • 微服务的边界、数据视图与微前端
    • 微服务设计实例与拆分原则
    • 分布式架构关键设计10问
  • Elasticsearch

  • 技术
  • DDD领域驱动
malize
2026-08-03
目录

DDD分层架构与微服务架构模型

# DDD 分层架构与微服务架构模型

这篇合并整理分层架构和三种主流架构模型(DDD 分层、整洁架构、六边形架构)的对比,它们表面长得不一样,内核其实是同一个思想。

# 一、DDD 四层架构

从上到下:用户接口层 → 应用层 → 领域层 → 基础层。

层 职责 关键点
用户接口层 面向用户/前端展示信息、解释指令 引入 DTO,前端要什么拼什么
应用层 服务组合与编排,面向用例和流程 很薄,理论上不含业务规则;还负责认证、权限、事务控制、事件发布订阅
领域层 核心业务逻辑 聚合根、实体、值对象、领域服务都住这里
基础层 数据库、缓存、MQ 等技术资源 通过依赖倒置被上层解耦

最容易踩的坑就一条:业务逻辑放错层。

  • 领域逻辑漏到应用层 → 应用层越来越胖,领域模型失焦,慢慢退化回三层架构
  • 与领域无关的逻辑塞进领域层 → 污染领域模型

业务逻辑的归属口诀(延续上一篇聚合的划分):

单实体逻辑   → 实体方法(充血模型)
跨实体逻辑   → 领域服务
跨聚合编排   → 应用服务
1
2
3

# 二、严格分层:每层只调用它紧邻的下层

DDD 分层有个重要原则:只依赖自己正下方的层(严格分层架构)。领域服务只能被应用服务调用,应用服务只能被接口层调用,逐层封装。

好处很直接:下层服务变更时,只需要逐层通知上层,依赖关系清晰可控。松散分层(允许跨层调用)短期省事,长期服务依赖网会乱成麻,还容易把核心业务逻辑泄漏出去。

# 三、依赖倒置:换数据库不再要命

传统三层架构里,业务代码直接依赖 DAO、依赖具体数据库,换库等于重写。DDD 用仓储模式(Repository)+ 依赖倒置解决:

  • 仓储接口放在领域层(领域层只认接口)
  • 仓储实现放在基础层(换 MySQL/达梦/MongoDB 只动这里)

之前整理过的 MySQL 迁移达梦 那种项目,如果当初架构是仓储模式,迁移成本会小非常多——这就是依赖倒置的现实价值。

# 四、三层架构怎么演进到 DDD 分层

对照关系:

三层架构 DDD 分层 变化点
表示层 用户接口层 引入 DTO
业务逻辑层 拆成应用层 + 领域层 编排归应用层,领域逻辑归领域层
数据访问层 基础层 DAO → 仓储模式(接口在领域层,实现在基础层)
公共工具类 基础层 Utility/Config 统一归置

# 五、整洁架构与六边形架构

# 整洁架构(洋葱架构)

同心圆结构,从内到外:领域模型 → 领域服务 → 应用服务 → 外围易变内容(UI、基础设施)。

唯一铁律是依赖原则:外层只能依赖内层,内层完全不知道外层的存在。越靠里越核心越稳定。

# 六边形架构(端口适配器架构)

核心理念:应用通过端口与外部交互(API 网关流行的思想源头)。

  • 内六边形:核心业务逻辑(应用 + 领域模型)
  • 外六边形:各种适配器——前端访问走主动适配(API),访问数据库/MQ 走被动适配(依赖倒置)

一个端口可以接多个外部系统,各自用不同的适配器做协议转换。

# 三者对比:形不同,神相同

把三张架构图摆一起,都能画出同一条"红线"——把核心业务逻辑和外部世界(前端、基础资源)隔离开:

  1. 领域层在最核心:原子能力,细粒度服务,追求稳定
  2. 应用层是"变速齿轮":对接前端多变的需求,做编排适配,尽量不让需求变化传导到领域层
  3. 外部依赖全部通过适配/倒置解耦

背后的洞察是:需求天天变的是界面和流程,不怎么变的是核心领域逻辑。分层就是按"变化频率"给系统做隔离——外面越灵活,里面越稳固。

# 六、架构演进:聚合是搬家的最小单位

领域模型不是画完就完了,它跟着业务演进,微服务也要跟着变。演进的抓手是聚合:

  • 微服务 1 里的聚合 a 被高频访问、拖累整体性能 → 把聚合 a 整体剥离成独立的微服务 2
  • 业务发展后发现聚合 d 更适合放微服务 1 → 整体搬迁过去

前提是设计时就守住聚合的代码边界(不跨聚合调用领域服务、不跨聚合联表),搬家才能低成本。

服务也会演进:领域层先只提供原子服务,当发现多个应用服务总是以相同顺序组合领域服务 b、c 时,就可以把 b+c 下沉合并成新的领域服务——领域模型会越用越精炼。

# 七、项目级微服务 vs 企业级中台微服务

两类微服务的集成方式不一样:

  • 项目级微服务:内部走分层架构,跨服务调用发生在应用层——应用服务除了编排自己的领域服务,也可以编排其它微服务发布在 API 网关上的服务
  • 企业级中台微服务:跨多个中台微服务的流程,不该塞进任何一个微服务里,而是在中台微服务之上加一层 BFF(Backend for Frontends)——它没有领域模型、没有领域层,专门做跨中台的服务组合编排和多渠道适配

# 八、小结

  • DDD 四层:接口层薄、应用层薄、领域层厚、基础层被倒置
  • 三种架构模型殊途同归:以领域模型为核心,核心逻辑与外部隔离
  • 应用层挡住需求的变,领域层沉淀业务的不变
  • 聚合边界守得好,架构演进就是"搬积木"
编辑 (opens new window)
#DDD#微服务#架构设计
上次更新: 2026/10/08, 03:22:29
领域事件:微服务解耦的关键
DDD、中台与微服务的铁三角

← 领域事件:微服务解耦的关键 DDD、中台与微服务的铁三角→

最近更新
01
奥格登基础英语 850 词
10-08
02
Elasticsearch 入门
10-08
03
Elasticsearch 优化
10-08
更多文章>
Theme by Vdoing | Copyright © 2023-2026 Malize | GitHub | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式