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

原英文资料:Domain-Driven Design with Onion Architecture

国外一位开发者 Wade Waldron结合洋葱架构使用了领域驱动设计后,代码质量得到显著的提高,并且可读性、可理解性和易于维护性也都大大加强。

洋葱架构有时候也被叫做“端口和适配器架构构”或者“六边形架构”。如图所示洋葱架构共有四层。



java洋葱模型 洋葱架构_java洋葱模型


Core是一个不涉及任何领域或者技术的构造快,它包含着像list、case类、actors等这种通用构造快,但绝不能包括技术概念,比如:REST、数据库等。

Domain存放着处理业务逻辑的类和方法。这些类和方法都是按照领域通用语言进行命名的。通过API可以控制domian并且所有的业务逻辑放在domian,这样使整个应用变的可移植,所有的的技术点都能被追踪,不会丢掉任何业务逻辑。

API层是domain的入口,使用domain中的术语和对象。wade认为API应该只公开不可变对象,以防止用户通过公开的对象获取底层的domain的访问权限,从而操纵domian.wade经常从API开始写程序,一个方法作为一个骨架,并且对应这一个高层次应用的测试吗,之后添加逻辑是特使通过从而驱动domain的实现。

Infrastructure是最外层,包含着各种技术的适配器,例如:数据库、用户接口和额外的服务。他可以访问所有的内部层但大多数访问都必须通过API实现。但也有例外的情况,比如在Infrastructure实现domian定义的接口。

依赖是一个非常重要的概念,外部层能够看见内部层,但内部层对它的外部层却一无所知。