微服务-DDD 分层架构

DDD 分层架构(现阶段大厂常用的架构):

DDD 分层架构 = 把代码按"业务本质"分层,核心目标:业务逻辑独立、不被技术污染、架构稳定。

DDD 官方经典四层架构(固定标准):

  1. 接口层(Interface/Presentation)
  2. 应用层(Application)
  3. 领域层(Domain)------核心核心核心
  4. 基础设施层(Infrastructure)

一、核心铁律(必须记住)

  • 依赖方向:只能外层依赖内层,内层绝对不依赖外层
  • 领域层 = 系统心脏,纯业务、无技术、不依赖任何外部框架
  • 业务规则只允许写在领域层

二、每层职责(大白话+实战)

1. 接口层(Interface)

负责:对外接客

  • 接收 HTTP/gRPC 请求
  • Controller、DTO、入参校验、分页、封装返回
  • 做DTO ↔ 领域对象 转换
  • 不写任何业务逻辑

包名:controller、dto、assembler

2. 应用层(Application)

负责:流程编排,不做业务决策

  • 协调领域对象、调用基础设施
  • 处理事务、发送领域事件
  • 只是**"组织步骤"**,不包含业务规则

例子:

创建订单流程:

  1. 校验商品
  2. 调用订单领域对象创建订单
  3. 扣库存
  4. 发送订单创建事件

应用层只负责"顺序",不负责"怎么算价格、能不能下单"等规则。

包名:application/service、application/event

3. 领域层(Domain)------DDD灵魂

全部都是业务本质,完全不依赖框架、DB、Redis

包含:

  • 聚合根(Aggregate Root)
  • 实体(Entity)
  • 值对象(Value Object)
  • 领域服务(Domain Service):跨实体业务逻辑
  • 领域事件(Domain Event)
  • 仓储接口(Repository Interface)(注意:只是接口,不实现)

所有业务规则都在这里:

  • 订单价格怎么算
  • 库存不足不能下单
  • 优惠规则
  • 状态流转(待支付 → 已支付 → 发货)

领域层:纯Java代码,无MyBatis、无Redis、无Spring!

4. 基础设施层(Infra)

负责:所有技术实现,为上层提供能力

  • DB 操作(Mapper、DAO)
  • 实现领域层的 Repository 接口
  • Redis、MQ、第三方API调用
  • 配置类、工具类

遵循依赖倒置

  • 领域定义接口
  • 基础设施去实现

包名:infra/repository、infra/mapper、infra/client

三、依赖方向(一张图看懂)

|--------------------------------------------------------------------------|
| Plain Text 接口层 ↓ 应用层 ↓ 领域层 ←------------------ 核心,不依赖任何人 ↑ 基础设施层(实现领域接口) |

传统三层:Controller → Service → Dao

(Service 混杂业务+编排+技术,一团糟)

DDD四层:

业务全部收拢到 Domain,永远最稳定

四、实战项目包结构(最标准)

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Plain Text com.xxx.order ├── controller # 接口层 ├── application # 应用层:编排、事务、事件 │ ├── service │ └── dto ├── domain # 领域层(核心) │ ├── entity # 聚合根、实体 │ ├── vo # 值对象 │ ├── service # 领域服务(业务规则) │ ├── repository # 仓储接口(只有方法签名) │ └── event # 领域事件 └── infra # 基础设施 ├── repository # 仓储实现 ├── mapper # MyBatis └── client # 第三方调用 |

五、一句话总结

  • 接口层:接请求
  • 应用层:排流程
  • 领域层:写业务(核心)
  • 基础设施层:做技术实现

DDD分层 = 业务与技术彻底分离,架构永不腐烂。

相关推荐
NineData1 天前
NineData 智能数据管理平台新功能发布|2026 年 3 月
数据库·oracle·架构·dba·ninedata·数据复制·数据迁移工具
marsh02061 天前
31 openclaw微服务架构实践:构建分布式系统
微服务·ai·云原生·架构·编程·技术
Database_Cool_1 天前
Tair 短期记忆架构实践:淘宝闪购 AI Agent 的秒级响应记忆系统
人工智能·架构
乾元1 天前
《硅基之盾》番外篇二:算力底座的暗战——智算中心 VXLAN/EVPN 架构下的多租户隔离与防御
网络·人工智能·网络安全·架构
清水白石0081 天前
《解锁 Python 潜能:从核心语法到 AI 服务层架构的工业级进阶与实战》
人工智能·python·架构
管鲍考试学习系统1 天前
在线考试系统是什么?功能、部署、应用场景全详解(管鲍考试学习系统 V8.0 深度版)
学习·架构·在线考试·考试系统·培训考试·考试练习
不是书本的小明1 天前
300+ ACK 小集群整合至统一共享集群架构与迁移方案
架构·k8s
七七powerful1 天前
AI实战--从零构建的「微舆」:一个多智能体舆情分析系统的架构解析与实践指南
架构·llm·微舆·bettafish
Agent产品评测局1 天前
企业工单处理自动化落地,派单回访全流程闭环实现:2026架构升级与多方案全景盘点
运维·人工智能·ai·架构·自动化