刚开始做java开发,用博客记录一些知识,做以积累。这篇文章大部分都是翻译的英文资料,英语一般,翻译的有点蹩脚,外加自己的少部分理解。
原英文资料:Domain-Driven Design with Onion Architecture
国外一位开发者 Wade Waldron结合洋葱架构使用了领域驱动设计后,代码质量得到显著的提高,并且可读性、可理解性和易于维护性也都大大加强。
洋葱架构有时候也被叫做“端口和适配器架构构”或者“六边形架构”。如图所示洋葱架构共有四层。
Core
是一个不涉及任何领域或者技术的构造快,它包含着像list、case类、actors等这种通用构造快,但绝不能包括技术概念,比如:REST、数据库等。
Domain
存放着处理业务逻辑的类和方法。这些类和方法都是按照领域通用语言进行命名的。通过API
可以控制domian
并且所有的业务逻辑放在domian
,这样使整个应用变的可移植,所有的的技术点都能被追踪,不会丢掉任何业务逻辑。
API
层是domain
的入口,使用domain
中的术语和对象。wade认为API
应该只公开不可变对象,以防止用户通过公开的对象获取底层的domain
的访问权限,从而操纵domian
.wade经常从API
开始写程序,一个方法作为一个骨架,并且对应这一个高层次应用的测试吗,之后添加逻辑是特使通过从而驱动domain
的实现。
Infrastructure
是最外层,包含着各种技术的适配器,例如:数据库、用户接口和额外的服务。他可以访问所有的内部层但大多数访问都必须通过API
实现。但也有例外的情况,比如在Infrastructure
实现domian
定义的接口。
依赖是一个非常重要的概念,外部层能够看见内部层,但内部层对它的外部层却一无所知。