写点什么

在洋葱(Onion)架构中实现领域驱动设计

  • 2014-11-02
  • 本文字数:1008 字

    阅读完需:约 3 分钟

Wade Waldron 是一位来自于 BoldRadius 的资深软件开发者,他在一次演讲中表示,他在几年前开始结合使用领域驱动设计(DDD)与洋葱架构,他的代码质量从此得到了极大的提高。一开始他仅仅使用了DDD,但随着结合使用洋葱架构,他发现他的代码更加易读易懂了,维护的难度也降低了许多。

洋葱架构有时也被称为端口和适配器(Ports and Adapters)架构,或者是六边形(Hexagonal)架构。不过Wade 认为,后者应该是洋葱架构的一个超集。

核心(Core **)层是与领域或技术无关的基础构件块,它包含了一些通用的构件块,例如 list、case 类或 Actor 等等。核心层不包含任何技术层面的概念,例如 REST 或数据库等等。
领域(Domain**)层
是定义业务逻辑的地方,每个类的方法都是按照领域通用语言中的概念进行命名的。对领域层的控制是通过 API 层进行操作的,而所有的业务逻辑都归属于领域层。这种方式保证了应用程序的可移植性,在不丢失任何业务逻辑的情况下替换掉整个技术实现。
API**** 层是领域层的入口,它使用领域中的术语和对象。Wade 提到:API 层应该仅仅向外界暴露不可变的对象,以避免开发者通过暴露的对象获得对底层领域的访问,并任意修改领域行为。Wade 通常会从 API 层开始编码工作,每个方法就是一个骨架,并且对应一个高层次的功能性测试。随后添加代码逻辑以使该测试通过,以此驱动领域层的编码实现。
基础架构(Infrastructure)层是最外部的一层,它包含了对接各种技术的适配器,例如数据库、用户界面以及外部服务。它能够访问所有处于内部的层次,但多数操作是通过 API 层进行的。但也有一种例外情况的存在 ,就是负责实现领域层中所定义的某些接口(译注:例如各种 Repository 的接口)。

洋葱架构中的一个重要概念是依赖,外部的层能够访问内部的层,而内部的层则对外部的层一无所知。

验证某种设计的常见方式是对各种情景进行测试,例如在必须使用一种新的数据库或用户界面技术时,该设计的表现如何。Wade 认为,如果认真地遵循了 DDD 和洋葱架构的原理,那么是完全能够处理好这种变更的。

Alistair Cockburn 在 2005 年时演示了六边形架构,作为对传统分层架构、耦合与牵连等问题的解决方案。

Russ Miles 去年在一次演讲中介绍了他构思的 Life Preserver 设计,这是一种基于六边形架构的设计。

除了以上两者,还存在着第三种变体,就是 Robert C. Martin 在去年谈到干净架构(Clean Architecture)。

查看英文原文: Domain-Driven Design with Onion Architecture

2014-11-02 05:0012020
用户头像

发布了 428 篇内容, 共 196.3 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

鸿蒙互动化实战:Game Service Kit重塑文档学习体验

huafushutong

HarmonyOS NEXT

枫清科技受邀参加2025数据智能大会

Fabarta

人工智能 科技 数据智能大会

IDM使用教程之如何下载网页中的视频资源,电脑网页上的视频怎么保存到本地

阿拉灯神丁

视频下载器 内容嗅探 IDM 网页视频下载工具 如何下载网页视频

鸿蒙支付安全实战:Payment Kit构建文档服务可信交易体系

huafushutong

ITSM 与自动化联动,让运维工作轻松翻倍

智象科技

自动化 ITSM 自动化运维 一体化运维

AI 技术在英语学习中的主要应用

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语学习

鸿蒙实时协同实战:Live View Kit打造沉浸式文档批注系统

huafushutong

HarmonyOS SDK应用服务

泉州等保测评机构电话是多少?在哪里?

行云管家

等保 等级保护 等保测评

限时揭秘!丰富采购经验力荐的堡垒机企业-行云管家!

行云管家

网络安全 堡垒机

06月24日刚出的社招岗位大家快投吧!

Y11

面试 找工作 大厂

火山引擎向量数据库 Milvus 版正式开放

火山引擎开发者社区

火山引擎

进入手机 App 的速度怎么越来越拖?

Speedoooo

APP开发 小程序容器 开发效率 开发方式 App加载速度

vRDMA 发布,助力云上 VPC 内高性能通信

火山引擎开发者社区

火山引擎

鸿蒙智能文档治理实战:File Manager Service Kit实现企业级文件管理

huafushutong

HarmonyOS SDK应用服务

语音生成+情感复刻,Cosyvoice2.0 极简云端部署

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

域名 SSL证书和IP SSL证书有什么区别?

国科云

通义灵码用户说 | 编程智能体+MCP加持,秒查附近蜜雪冰城

阿里云云效

通义灵码 Qwen

鸿蒙智能提醒实战:Notification Kit实现文档关键节点零遗漏

huafushutong

CST热仿真CHT求解器--针式散热片+风扇

思茂信息

仿真 CST Studio Suite 热仿真

ManageEngine卓豪简化变更管理的工作方法(三)

ServiceDesk_Plus

变更管理

FORCE 开发者论坛 | 火山引擎发布多款 Agent 开发工具

火山引擎开发者社区

火山引擎

鸿蒙地理围栏实战:Location Kit实现智能文档地理围栏

huafushutong

HarmonyOS SDK应用服务

鸿蒙健康守护实战:Health Service Kit实现智能文档工作监护

huafushutong

HarmonyOS SDK应用服务

编程简单了,部署依旧很难|Karpathy 演讲的 5 点解读

阿里巴巴云原生

阿里云 云原生

鸿蒙地理可视化实战:Map Kit实现智能文档位置洞察

huafushutong

HarmonyOS SDK应用服务

超实用!SpringAI提示词的4种神级用法

电子尖叫食人鱼

数据库 前端

如何系统化搭建超智融合算力架构 | 龙蜥大讲堂

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥大讲堂 超智融合算力

字节跳动开源了一款 Deep Research 项目

火山引擎开发者社区

火山引擎

启信宝联合六大数交所共同编制,《企业数据治理实践白皮书》发布

合合技术团队

人工智能 算法 大数据‘’

通义灵码用户说 | 编程智能体+MCP加持,秒查附近蜜雪冰城

阿里巴巴云原生

通义灵码

鸿蒙商业化实战:IAP Kit构建安全文档付费体系

huafushutong

HarmonyOS SDK应用服务

在洋葱(Onion)架构中实现领域驱动设计_架构_Jan Stenberg_InfoQ精选文章