写点什么

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

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

关注

评论

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

基于阿里云向量检索 Milvus 版与 PAI 搭建高效的检索增强生成(RAG)系统

阿里云大数据AI技术

人工智能 阿里云 Milvus

OpenHarmony 成功亮相国际学术会议 ASPLOS 2024

科技热闻

软件测试学习笔记丨后端接口开发 - MyBatis 代理开发

测试人

软件测试

智谱AI亮相2024 ICLR,分享面向AGI的三大技术趋势

Geek_2d6073

Macs Fan Control for mac:提高设备的散热效果,减少过热造成的风险

Rose

枫清科技(Fabarta )再获“鑫智奖”,推动金融数智化与智能营销创新

Fabarta

激发大数据场景价值,润和软件HopeOS闪耀鲲鹏昇腾开发者大会2024

科技热闻

"Global Golden Course" - Certified ScrumMaster (Delivered in English at weekend)

ShineScrum捷行

Scrum Agile ScrumMaster Agile Coach

Imagenomic Portraiture 4.5 ps智能磨皮滤镜插件

Rose

带你熟悉CCE集群增强型CPU管理策略enhanced-static

华为云开发者联盟

Kubernetes 华为云 华为云开发者联盟 华为云CCE 企业号2024年5月PK榜

PS磨皮滤镜降噪插件套装 Imagenomic Professional Plugin Suite 支持ps2024

Rose

Downie 4 mac视频下载器:自动检测和下载指定网站上的最新视频

Rose

软件测试学习笔记丨后端接口开发 - MyBatis 传统开发方式

测试人

软件测试

解析 cURL 命令的功能和特性

Apifox

后端 后端开发 API curl 网络请求

芯盾时代智能风控决策系统信贷版

芯盾时代

监管合规 风控系统 金融业 信贷

LED显示屏技术升级方向解析

Dylan

工具 LED显示屏 全彩LED显示屏 led显示屏厂家 舞台表演

谷歌访问助手,解决chrome扩展无法自动更新的问题

Rose

腾讯互娱面经,希望别凉

王中阳Go

Go 面试 微服务 大厂面经 Go进阶

第六届·2024 MindSpore 量子计算黑客松热身赛赛题解读

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号2024年5月PK榜

在iPhone / iPad上轻松模拟GPS位置:AnyGo for Mac中文破解资源

Rose

Mint Blockchain,要让全人类都拥有 NFT 资产!

NFT Research

web3 NFT\ L2

MacDroid pro:打破Android和Mac系统之间的传输障碍

Rose

大语言模型 —— AI时代的文字计算器?

Baihai IDP

程序员 AI 白海科技 企业号 5 月 PK 榜 LLMs

photoshop 2021安装教程 ps2021中文版 mac/win

Rose

碳课堂|一文读懂全球碳标准的前世今生

AMT企源

碳管理 碳核算 碳认证

万界星空科技商业开源MES+项目合作+商业开源低代码平台

万界星空科技

低代码平台 mes #开源 开源mes 万界星空科技

速度围观|使用分布式企业级任务调度平台,到底有多香?

智在碧得

数字化转型 XXL-JOB 任务调度平台 http任务 elastic job

开源之夏2024学生报名启动!阿里云PolarDB社区项目期待你的参与!

阿里云数据库开源

数据库 阿里云 学生开发者

这款PDF解析工具,精准触达大模型问答应用的需要

合合技术团队

人工智能 PDF OCR LLM

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