几年前我在可落地的DDD的(2)-为什么说MVC工程架构已经过时总结了基于DDD的微服务工程结构是怎么样的。那篇文章重点阐述了与MVC架构的区别。导致一些细节没有讲清楚,本文结合最近两年的实践,再详细阐述下。
请添加图片描述
为了实现一个端到端的用户请求,后端服务按照调用链一般可以分成四层
应用被拆成四层,每一层有自己的作用。现在我们需要做的就是有效的组织这四层,以领域模型为中心,合理分层,高内聚、低耦合,隔离并解耦内部核心业务逻辑与外部应用和资源。业界比较常见的有以下几种。
左边是传统的四层架构,即还是以调用顺序组织的。右边是依赖倒置的。
所谓依赖倒置即虽然按照运行时的调用关系是A依赖B,但是我在编译环节是让B依赖A。即A提供接口,B来实现。主要是两点
关于基础设施层是否依赖接口层,这点个人持怀疑态度。从实践来看。基础设施层的迭代频率要低于接口层,抽象程度高于用户接口层。从依赖角度来说,让用户接口层依赖基础设施层更合适。
下图是我们常用的分层架构。
请添加图片描述
网络用图,如有侵权,联系删除
六边形架构通过内外两个六边形将领域层和其他部分分割成两部分。对于其他部分,提出了2个概念。
举个例子,用户取消支付,系统需要发布消息。领域层提供入口端口CancelPayService,出口端口sendCancelPayMsg 用户接口层在controller中调用CancelPayService. 基础设施层实现sendCancelPayMsg接口,发送一条消息到kafka。
请添加图片描述
网络用图,如有侵权,联系删除
整洁架构是在分层架构基础上,更清晰的定义了各层的依赖关系。按照从内到外,定义了各层的重要等级。越往里,代码越核心,依赖就应该越少。外圆依赖内圆,内圆无需感知外圆。
基础设施 -> 用户接口 -> 应用服务 -> 领域服务
请添加图片描述
网络用图,如有侵权,联系删除
菱形架构是去掉了用户接口层和基础设施层这个概念,改成叫网关,同时通过南北网关来区分。
只是换了个说法,本质上没什么区别。
分层、六边形、整洁、菱形架构本质上没什么区别,都是分层。通过不同的维度来把各层关系的依赖关系阐述的更清晰。核心点在于
至于其他层是否有明确的依赖关系是次要点,可以忽略。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有