QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

J2PaaS 低代码平台,正式发布开源版!

J2PaaS低代码平台

低代码 零代码 低代码开发 低代码开发平台 无代码平台

2.两数相加(链表)

黄敏

绝了!Java程序员面试全方位贴身指南,轻松跳槽获取高薪资offer

程序员 架构 面试 后端 java

惊了!网易架构大牛熬夜手敲千页网络协议笔记,竟在Github上标星百万!

Java 架构 面试 程序人生 编程语言

网易云信 NERTC 高清画质体验之 H.265的工程实践 | 体验共享技术专题

网易云信

Java 测试 音视频 视频

真香!肝完Alibaba这份面试通关宝典,我成功拿下今年第15个Offer

Java 编程 程序员 IT 计算机

吹爆!阿里高工携18位架构师耗时57天整合的1658页面试总结太香了

Java 编程 程序员 架构 面试

“他”靠这份GitHub star过万的1121页图解算法成功杀进字节跳动

Java 编程 程序员 IT 计算机

【直播回顾】5步实现精细化用户触达,助力业务增长

极光JIGUANG

消息推送 用户触达

拒绝焦虑!Alibaba巨擎随手甩来的一本Java性能优化让我收获满满

Java 架构 面试 程序人生 编程语言

阿里巨擎耗时六个月整理的这套图解HTTP笔记,在Github上被疯狂转载!

Java 架构 面试 程序人生 编程语言

Qcon 免费报名 | 融云「实时通信技术专场」议题抢鲜看

融云 RongCloud

开发者 通信云 场景化

2021云栖大会丨果断收藏!「混合云参会指南」来啦~

人工智能 阿里云 互联网 云栖大会 前沿科技

智能化如何升级传统厨房烹饪体验?苏泊尔与鸿蒙智联携手交出创新答卷

科技汇

动态模型之增压暂停【FunTester测试框架】

FunTester

性能测试 接口测试 测试框架 FunTester 动态模型

EDA 事件驱动架构与 EventBridge 二三事

阿里巴巴云原生

阿里云 云原生 EDA架构 事件驱动型架构

30天肝出来的Java面试手册!登顶Github标星288k

Java 程序员 架构 面试 后端

英特尔举办第十四届物联网峰会,携手中国生态伙伴迈向融合边缘新时代

科技新消息

保持高效学习的 7 个方法

Phoenix

学习方法

Python代码阅读(第36篇):列表偏移

Felix

Python 编程 Code Programing 阅读代码

Linux服务器部署服务

黄敏

递推算法与递推套路(算法基础篇)

有道技术团队

算法 大前端 网易有道

EMQ X VS RabbitMQ:两大消息服务器 MQTT 性能对比全解(下)

EMQ映云科技

RabbitMQ 物联网 IoT mqtt emq

自定义View:文字的测量与绘制

Changing Lin

10月月更

Angular 依赖注入 - 全面解析

PingCode研发中心

angular 依赖注入 对象提供者 注入器 令牌

秋招如何抱佛脚?2021最新大厂Java面试真题合集(附权威答案)

Java 编程 程序员 架构 IT

Java集合核心内容之葵花宝面,搞定90%以上的技术面!建议收藏

程序员小呆

Java 程序员 架构师

【浪潮云说】直播间第九期今晚20:00准时开播

云计算

音视频编解码 -- 编码参数 CRF

声网

ffmpeg 视频编解码 视频压缩 CRF

Spring Boot 这样的优化,让你的项目飞起来

程序员小呆

Java 程序员 架构师

好家伙!华为内部Java系统优化笔记一夜之间跃居Github热榜第二

Java 架构 IT 计算机 知识分享

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