领域驱动DDD三种架构-分层架构、洋葱架构、六边形架构
博主介绍: 各人好,我是Yuperman,互联网宇宙厂经验,17年医疗健康行业的码拉松奔驰者,曾担任技术专家、架构师、研发总监负责和主导多个应用架构。技术范围: 现在专注java体系,以及golang、.Net、软件架构、DDD、微服务、redis、nginx、tomcat、mysql、oracle等
业务范围: 从数字医院到区域医疗,从院内业务体系到互联网医院及健康服务,从公立医院到私立医院都有一些履历及理解
*** 为各人分享一些技术积累,欢迎交流合作 持续关注Yuperman ***
领域驱动DDD三种架构-分层架构、六边形架构、洋葱架构
本文介绍DDD的三种重要实现架构
1.分层架构
2.六边形架构
3.洋葱架构
据相识互联网许多大厂都在应用实践DDD,同时许多银行保险等行业也在积极深入应用,DDD也非常得当我地点的医疗行业,也在部门项目中进行了应用。在早期的项目中应用分层架构较多,随着理解深入和DDD演进,逐渐应用洋葱架构。
领域驱动DDD得当应用场景包罗:
(1)业务应用体系:当项目涉及多个业务领域,且业务逻辑复杂时,采用DDD能够进步体系的可维护性、可扩展性和机动性。
(2)团队协作:在大型项目中,DDD有助于明白各团队的职责范围,进步团队之间的沟通协作效率。
(3)业务变革频繁的项目:DDD能够资助体系快速相应业务变革,低落因业务变动导致的开发成本。
优势与不敷
优势:
(1)进步可维护性:通过将复杂的业务场景划分为简朴的领域,有利于代码的阅读和维护。
(2)进步可扩展性:领域之间的解耦低落了体系间的耦合度,有利于未来的功能扩展和新技术引入。
(3)进步机动性:基于领域模子的设计使得体系能够更快地相应业务变革,进步适应性。
(4)促进团队沟通:通过清楚地界说领域边界,有助于团队之间的交流和协作。
不敷:
(1)学习成本较高:把握DDD必要一定的领域知识和编程经验,对于初学者来说,学习成本较高。
(2)过度设计:在实际项目中,过度关注领域划分大概导致体系设计过于复杂,反而低落开发效率。
(3)领域建模挑战:对于某些复杂业务场景,领域建模大概存在一定的困难,必要开发者具备较高的业务理解和建模能力。
一、分层架构
2003年,Eric Evans出书了他的标志性著作《领域驱动设计:软件焦点复杂性应对之道》。今后,DDD的概念被人熟悉,以及基于DDD的一系列架构演变开始出现。
https://i-blog.csdnimg.cn/direct/3ab0c4084986468bb8e80ee98f3e6a02.jpeg
分层架构,每一层,只与自己下一层发生耦合,雷同于网络的7层或TCP/IP的4层模子架构,每一层各司其职,并且只关心向下一层的实现,而不会出现各层耦合。
DDD分层架构中包罗四层:从上到下分别是用户接口层,应用层,领域层和基础层。
二、六边形架构
2005年Alistair Cockburn提出了六边形架构,在这个架构中,将应用分为内六边形和外六边形两层,内六边形实现应用的焦点业务逻辑。外六边形完成外部应用,基础资源等的交互和访问,对于与差别的外部体系交互,由外六边形的适配器负责协议转换,包管内六边形业务逻辑的干净。
这种架构也是典型的分层架构,和DDD分层架构一样,都体现了高内聚,低耦合的设计特性。六边形也常作为指导微服务设计的紧张架构之一。
https://i-blog.csdnimg.cn/direct/ffecb90a29c741ee86a69b3685d09df7.jpeg
六边形架构又称端口-适配器架构,这个名字更容易理解。六边形架构将体系分为内部(内部六边形)和外部,内部代表应用的业务逻辑,外部代表应用的驱动逻辑、基础设施或其他应用。内部通过端口和外部体系通信,端口代表了一定协议,以API呈现。
一个端口大概对应多个外部体系,差别的外部体系必要使用差别的适配器,适配器负责对协议进行转换。这样就使得应用程序能够以同等的方式被用户、程序、主动化测试、批处理脚本所驱动,并且可以在与实际运行的装备和数据库相隔离的环境下进行开发和测试。
一个端口对应多个适配器,是对一类外部体系的归纳,它体现了对外部的抽象。应用通过端口为外界提供服务,这些端口必要被精良地设计和测试。内部不关心外部如何使用端口,从一开始就要假定外部使用者是可替换的。
三、洋葱架构
洋葱架构是比力新的DDD架构,2008年Jeffrey Palermo已经提出了具有分层头脑的洋葱架构,如下图,同心圆代表软件的差别部门,从里向外依次是领域模子,领域服务,应用服务和外层的基础设施和用户终端。
https://i-blog.csdnimg.cn/direct/af8a5d91183042278d2d6de153f820bf.png
洋葱架构根据依赖原则,界说了各层的依赖关系,越往里依赖程度越低,代码级别越高,越是焦点能力。外圆代码依赖只能指向内圆,内圆不必要知道外圆的环境,这种架构也是典型的分层架构,和DDD分层架构一样,都体现了高内聚,低耦合的设计特性。洋葱架构也常作为指导微服务设计的紧张架构之一。
https://i-blog.csdnimg.cn/direct/921d44704525432c89d2c4152d0fbf49.jpeg
洋葱架构与六边形架构有着相同的思路,都是通过编写适配器代码将应用焦点从对基础设施的关注中解放出来,避免基础设 施代码渗透到应用焦点之中。这样应用使用的工具和传达机制都可以轻松地替换,在一定程度上避免技术、工具或者供应商锁定。
洋葱架构分离了基础设施和业务应用,使得我们可以方便地模仿(Mock)基础实施,对业务应用进行测试。企业应用中存在着不止两个条理,洋葱架构还在业务逻辑中加入了一些在领域驱动设计的过程中被识别出来的条理:
四、结语
领域驱动DDD的分层架构、洋葱架构、六边形架构的体现情势稍有差别,对应落地到代码层面的实现条理关系也略有差别,但是焦点头脑都是一样的,按业务创建领域并进行业务解耦。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]