首页/开发/系统分析与架构设计速查/洋葱架构(Onion Architecture)
架构风格与模式58 条

洋葱架构(Onion Architecture)

以领域模型为中心向外分层:领域模型 → 领域服务 → 应用服务 → 基础设施,依赖只指向内层,外层实现内层定义的接口。

最内层领域实体、值对象与领域规则
中间层应用服务与用例编排
最外层数据库、消息、UI 等实现细节
  • 依赖只向内:外层引用内层,内层不感知外层实现
  • 内层定义接口,外层以适配器实现(依赖倒置)
  • 应用服务编排用例:事务、授权与流程控制放中间层
  • 领域层保持纯净:不引入 ORM、HTTP 等基础设施类型
  • 跨层传数据用命令或 DTO 对象,避免持久化实体外泄
  • 包结构反映分层:领域包不依赖应用与基础设施包

各层测试策略

层测试方式要点
领域层单元测试不启动框架,直接验证规则
应用服务集成测试用内存适配器替换数据库
基础设施契约测试验证适配器满足内层接口
常见违规领域实体直接携带 ORM 注解或依赖框架类型
检查手段把依赖方向写成自动检查,纳入构建流程
洋葱架构与六边形、整洁架构的差异主要在术语与层数,核心约束一致:依赖向内。

易错点

  • 按层建工程目录却允许外层类型出现在内层签名中
  • 把领域服务写成事务脚本,模型层退化为数据结构

数据来源与参考

  • Jeffrey Palermo《The Onion Architecture》(2008)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌