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)架构中实现领域驱动设计相关推荐

  1. 谈谈微服务架构中的领域驱动设计

    谈谈微服务架构中的领域驱动设计 https://mp.weixin.qq.com/s/43HSud6ijdVzPA_wdLrxzQ 谈谈微服务架构中的领域驱动设计 本文是关于领域驱动设计与微服务架构结 ...

  2. 演进架构中的领域驱动设计

    原文链接:http://www.infoq.com/cn/articles/ddd-evolving-architecture 作者 Mat Wall and Nik Silver 译者 王丽娟 发布 ...

  3. 微服务架构设计基础之领域驱动设计

    背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微 ...

  4. 在项目中引入领域驱动设计的经验

    Chris Patuzzo近期在一次演讲中介绍了领域驱动设计(DDD)的原则,并结合一个基于Ruby on Rails的真实项目进行讲解.在这次项目之前,Chris所在的团队为重新设计公司的主营网站所 ...

  5. 何时使用领域驱动设计

    何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了.领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architectu ...

  6. 【转载】何时使用领域驱动设计

    何时使用领域驱动设计 转载自:https://www.cnblogs.com/daxnet/p/15177443.html 何时使用领域驱动设计? 其实当你的应用程序架构设计是面向业务的时候,你已经开 ...

  7. 何时使用领域驱动设计(DDD)

    何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了.领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architectu ...

  8. 万字长文解析何时使用领域驱动设计

    何时使用领域驱动设计 转载自:https://www.cnblogs.com/daxnet/p/15177443.html 何时使用领域驱动设计? 其实当你的应用程序架构设计是面向业务的时候,你已经开 ...

  9. 用洋葱架构实现领域驱动设计

    刚开始做java开发,用博客记录一些知识,做以积累.这篇文章大部分都是翻译的英文资料,英语一般,翻译的有点蹩脚,外加自己的少部分理解. 原英文资料:Domain-Driven Design with ...

最新文章

  1. Java基础--通过反射获取私有的成员方法示例代码
  2. Asp.NET Core一个接口的多个实现如何基于当前HTTP请求注册
  3. ListView中convertView和ViewHolder的工作原理
  4. 打扰了!MacBook Pro 16英寸国行版正式开售:顶配46421元
  5. python中实例和对象的区别_通过Python中对象实例的属性比较对象实例是否相等
  6. 当前脚本文件中调用另外一个脚本
  7. 洛谷——P2613 【模板】有理数取余
  8. JUC与JVM并发编程学习笔记01
  9. 教你win7关闭开机动画,大幅度加快开机时间
  10. Django入门,,适用小白
  11. HTML5+CSS3项目实战之河马牙医首页、百度首页、Mac桌面、简书首页、登录注册页面、苏宁易购首页
  12. 功放世界 debug
  13. 英雄联盟查服务器角色信息,LOL英雄联盟角色信息查询
  14. 程序员“真实”日常:每天敲代码不到 1 小时
  15. java中cookie的有效时间设置
  16. tplogin 服务器未响应,为什么tplogin.cn老是域名解析错误
  17. 关于函数不定积分的方法总结
  18. KL Divergence KL散度
  19. 一文搞懂鱼眼相机模型
  20. la是什么牌子_LA是什么牌子

热门文章

  1. latex 集合相关符号:实数集,整数集,并,包含,真包含
  2. matlab在图片上画标记然后整幅保存的方法
  3. 标书导出html,小白不会做标书?老手有这些经验要告诉你!
  4. 英语作文计算机国际会议开幕词,英文一篇计算机国际会议的开幕词
  5. 关于如何向老板提涨工资
  6. oracle秘钥到期,大佬们,关于甲骨文云重置SSH密钥方法,求指点
  7. ESRI中国(北京)招聘技术工程师
  8. 2012ESRI中国用户大会有感
  9. Base64编码和其隐写术
  10. 攻防世界(杂项篇MISC)---base64stego