AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

在洋葱(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:0011898
用户头像

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

关注

评论

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

ByConity :深入探讨ELT和bsp 模式应用实例

RoSofteg

ByConity

AWS re:Invent 2024 — AI 基础设施架构

云物互联

亚马逊云科技 AI基础设施

人才招聘系统哪个好?分享国内企业爱用的8款招聘系统

易成研发中心

征程 6 云端 Ota 升级方案设计与实现

地平线开发者

自动驾驶 算法 地平线征程5

2024年团队文档共享:盘点8款热门网盘

易成研发中心

手把手教你华为鸿蒙开发之第十三节

The Wang

【YashanDB知识库】服务器重启后Yashandb无法启动

YashanDB

数据库 yashandb

【YashanDB知识库】如何处理no free block in dictionary cache

YashanDB

数据库 yashandb

扫段攻击来袭,DDoS防御面临新挑战

网络安全服务

IP udp syn DDoS DDoS 攻击

AutoMQ 流表一体新特性 Table Topic 发布: 无缝集成 AWS S3 Table 和 Iceberg

AutoMQ

kafka iceberg 3S reinvent

跨越平台界限:探索Native AOT的交叉编译技术

代码忍者

Calcite UDF 实战之 ShardingSphere 联邦查询适配 MySQL BIT_COUNT

端小强

ShardingSphere Calcite

2025全球计算大会:集齐计算产业 “王牌”,见证全球计算联盟正式启航

新消费日报

京东云与中兴新支点国产操作系统完成产品兼容性互认证

京东科技开发者

【YashanDB知识库】IMP跨网络导入慢问题

YashanDB

数据库 yashandb

【YashanDB知识库】insert语句有编码不识别字,执行卡住问题

YashanDB

数据库

决赛预告|2024数据库编程大赛前8名入围,决赛将评选出SQL大师!

NineData

李飞飞团队多模态模型统一动作与语言;OpenAI 推出电话服务,让更多人与 Chatgpt 对话丨 RTE 开发者日报

声网

uniapp 极速上手鸿蒙开发

万少

uni-app 鸿蒙

【YashanDB知识库】in大量参数时查询性能慢

YashanDB

数据库 yashandb

Kali Linux 2024.4 发布 - 领先的渗透测试发行版

sysin

kali Linux

亿方云企业网盘功能解析:与10款主流网盘比较优劣

易成研发中心

影智科技唐沐:人形是累赘,具身智能并不缺少落地场景

Alter

人形机器人 具身智能

如何实现一个充满科技感的官网(一)

极限实验室

React three.js next.js web 开发

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