在洋葱(Onion)架构中实现领域驱动设计
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
在洋葱(Onion)架构中实现领域驱动设计相关推荐
- 谈谈微服务架构中的领域驱动设计
谈谈微服务架构中的领域驱动设计 https://mp.weixin.qq.com/s/43HSud6ijdVzPA_wdLrxzQ 谈谈微服务架构中的领域驱动设计 本文是关于领域驱动设计与微服务架构结 ...
- 演进架构中的领域驱动设计
原文链接:http://www.infoq.com/cn/articles/ddd-evolving-architecture 作者 Mat Wall and Nik Silver 译者 王丽娟 发布 ...
- 微服务架构设计基础之领域驱动设计
背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微 ...
- 在项目中引入领域驱动设计的经验
Chris Patuzzo近期在一次演讲中介绍了领域驱动设计(DDD)的原则,并结合一个基于Ruby on Rails的真实项目进行讲解.在这次项目之前,Chris所在的团队为重新设计公司的主营网站所 ...
- 何时使用领域驱动设计
何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了.领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architectu ...
- 【转载】何时使用领域驱动设计
何时使用领域驱动设计 转载自:https://www.cnblogs.com/daxnet/p/15177443.html 何时使用领域驱动设计? 其实当你的应用程序架构设计是面向业务的时候,你已经开 ...
- 何时使用领域驱动设计(DDD)
何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了.领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architectu ...
- 万字长文解析何时使用领域驱动设计
何时使用领域驱动设计 转载自:https://www.cnblogs.com/daxnet/p/15177443.html 何时使用领域驱动设计? 其实当你的应用程序架构设计是面向业务的时候,你已经开 ...
- 用洋葱架构实现领域驱动设计
刚开始做java开发,用博客记录一些知识,做以积累.这篇文章大部分都是翻译的英文资料,英语一般,翻译的有点蹩脚,外加自己的少部分理解. 原英文资料:Domain-Driven Design with ...
最新文章
- Java基础--通过反射获取私有的成员方法示例代码
- Asp.NET Core一个接口的多个实现如何基于当前HTTP请求注册
- ListView中convertView和ViewHolder的工作原理
- 打扰了!MacBook Pro 16英寸国行版正式开售:顶配46421元
- python中实例和对象的区别_通过Python中对象实例的属性比较对象实例是否相等
- 当前脚本文件中调用另外一个脚本
- 洛谷——P2613 【模板】有理数取余
- JUC与JVM并发编程学习笔记01
- 教你win7关闭开机动画,大幅度加快开机时间
- Django入门,,适用小白
- HTML5+CSS3项目实战之河马牙医首页、百度首页、Mac桌面、简书首页、登录注册页面、苏宁易购首页
- 功放世界 debug
- 英雄联盟查服务器角色信息,LOL英雄联盟角色信息查询
- 程序员“真实”日常:每天敲代码不到 1 小时
- java中cookie的有效时间设置
- tplogin 服务器未响应,为什么tplogin.cn老是域名解析错误
- 关于函数不定积分的方法总结
- KL Divergence KL散度
- 一文搞懂鱼眼相机模型
- la是什么牌子_LA是什么牌子