写点什么

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

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

关注

评论

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

制作颜色选择器(全)

空城机

JavaScript Vue 大前端 4月日更 颜色选择器

新版犀牛书该不该入手?

清秋

JavaScript ecmascript ES6 技术书籍 4月日更

架构实战营 - 模块1 - 作业

Ming

软件架构

智慧公安重点人员管控系统搭建,助推公安智慧化发展

13828808769

区块链+ #区块链#

区块链赋能文化旅游,推动旅游行业转型升级

13828808769

区块链 #区块链#

基于角色访问控制RBAC权限模型的动态资源访问权限管理实现

crudapi

spring security 权限 rbac crudapi 角色

Java一套拳法刷掉n个遍历树的问题 John 易筋 ARTS 打卡 Week 43

John(易筋)

ARTS活动

智慧党建系统搭建,干部管理平台开发

人生好走的路那么多,你偏要选这条难走的走

小天同学

自我思考 个人感悟 人生修炼 4月日更

云计算防火墙对象(组)的实践

Python研究所

云计算 防火墙 对象组

不想写代码偷懒之配置化

顿晓

大前端 配置化开发 4月日更

Redis split-brain 脑裂

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

区块链BaaS平台,创造不一样的服务

电微13828808271

区块链+

头条二面:你们公司怎么处理MySQL的 Binlog 日志?

Java架构师迁哥

dubbo几个问题整理:优雅停机、线程池配置

程序员架构进阶

dubbo 28天写作 4月日更 优雅停机 线程配置

Kafka又出问题了!

冰河

kafka 消息队列 消息中间件 异步编程

从小白程序员到大厂高级技术专家我看过哪些书籍?

冰河

程序员 程序人生 冰河 推荐书单

区块链BaaS平台+BI大数据系统

电微13828808271

区块链+

Kafka的再平衡机制

五分钟学大数据

kafka 4月日更

2021字节大厂面经分享:Java面试高分宝典!GitHub已标星86.7K

比伯

Java 编程 架构 面试 计算机

javascript

wudaxue

JavaScript

Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天

梦想橡皮擦

Python OpenCV 4月日更

区块链技术推动自然资源领域信息化发展

13828808769

区块链+ #区块链#

重构: 自己挖的坑自己填

夏兮。

Java 重构 测试 单元测试

架构训练营模块1作业-江哲

江哲

作业

树莓派简介

IT蜗壳-Tango

IT蜗壳教学 4月日更

重点人员可视化管理平台搭建,公安指挥调度平台

大数据计算生态之数据计算(一)

小舰

4月日更

打完新冠疫苗后要注意的两件事

石云升

28天写作 新冠疫苗 4月日更

【死磕JVM】给同事讲了一遍GC后,他要去面试,年轻人,就是容易冲动!

牧小农

JVM 垃圾回收 垃圾收集 垃圾回收算法

Linux chmod命令

一个大红包

4月日更

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