AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

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

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

关注

评论

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

ShareSDK抖音

MobTech袤博科技

利用Halo 20分钟构建企业门户

coxi_vv

开源软件 halo 1Panel

每个Moka招聘系统用户都需要一套八爪鱼RPA

八爪鱼采集器︱RPA机器人

RPA 自动化 招聘 智能化

10分钟构建Web 应用防火墙-uuWAF

coxi_vv

开源 waf 1Panel

10分钟构建服务监控工具

coxi_vv

监控 Prometheus 1Panel

Python深度解析:上下文协议设计与应用技巧

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 上下文管理

ShareSDK Twitter

MobTech袤博科技

开发者

望繁信科技荣膺上海市浦东新区博士后创新实践基地称号

望繁信科技

流程挖掘 流程智能 数字北极星 上海望繁信科技 博士后基地

提升用户体验:阿里巴巴拍立淘API返回值的个性化推荐

技术冰糖葫芦

API Explorer API boy API 接口 API 测试

别再被坑了! JavaScript类型检测的最佳实践

Immerse

JavaScript 数据结构 数据类型

Mobpush 标签推送

MobTech袤博科技

20分钟构建企业知识库

coxi_vv

开源 halo 1Panel 开源知识库

ShareSDK 企业微信

MobTech袤博科技

下载量突破400万,百万开发者首选的 AI 编码工具通义灵码是如何炼成的?

阿里巴巴云原生

阿里云 云原生 通义灵码

10分钟构建运维安全审计系统

coxi_vv

开源 运维 1Panel jumpserver

Poetry vs npm:两个包管理器的迷人相似性

我再BUG界嘎嘎乱杀

Python 编程 后端 npm Poetry

1688商品详情API返回值:提升用户体验的关键

技术冰糖葫芦

API Explorer API boy API 接口 API 测试

CAT 对接观测云最佳实践

观测云

cat

10分钟构建内网邮件服务器

coxi_vv

开源软件 1Panel 开源邮件服务器 邮件服务器

HarmonyOS应用程序访问控制探究

白晓明

HarmonyOS NEXT

10分钟构建业务数据大屏

coxi_vv

服务器 数据可视化 开源软件 DataEase 1Panel

短信验证合规指南

MobTech袤博科技

开发者

本地部署马斯克开源Grok-1大模型,贝锐花生壳3步实现远程访问

贝锐

AI 内网穿透 Stable Diffusion

2028年洛杉矶奥运会和残奥会指定Autodesk 为“不新建永久场馆计划”官方设计与制造平台

E科讯

数据安全与合规性:观测云在保护企业数据中的角色

可观测技术

数据安全

AI+仿真,助力工业智能化变革:面向仿真工程师的机器学习工具

Altair RapidMiner

人工智能 AI 设计 仿真 altair

AI 流媒体音乐平台 Melodio 发布;多模态模型 VITA 可打断无需唤醒词丨 RTE 开发者日报

声网

ShareSDK QZone

MobTech袤博科技

开发者

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