知识卡片
DDD分层架构的依赖倒置演变与严格分层原则
内容
早期DDD分层架构是传统四层架构,各层都直接依赖基础层,基础层因此处在最核心的位置——但这是有问题的,因为领域层才是软件真正的核心,基础层反而被其他层依赖,主次颠倒了。优化后的DDD分层架构引入依赖倒置:各层不再直接依赖基础层的具体实现,而是通过仓储接口访问基础层,从上到下依次是用户接口层、应用层、领域层、基础层,基础层反过来变成为其他层提供支撑的角色。DDD分层架构还有一条重要依赖原则:”每层只能与位于其下方的层发生耦合”,据此可分为严格分层架构(任何层只能依赖其直接下方的层)和松散分层架构(允许跨层依赖任意下方的层)——优化后的DDD分层架构属于严格分层,传统DDD四层架构属于松散分层。书中建议优先采用严格分层架构,理由是为了让服务调用关系更可管理:跨层依赖越自由,调用链路就越难追踪和约束,严格分层用”只能依赖紧邻下层”这一条硬性规则,换来了更清晰、更容易推理的调用关系。
参考来源
- 位置:《中台架构与实现:基于DDD和微服务》第10章《DDD分层架构》"10.1 什么是DDD分层架构"、"10.1.5 DDD分层架构的重要原则"(源文件:_epub-src/OEBPS/Text/chapter3-6-1.xhtml、chapter3-6-1-5.xhtml)
- 结论依据:原文说明"在最早的传统四层架构中,基础层被其他层依赖,位于最核心的位置……但实际上领域层才是软件的核心……后来就采用了依赖倒置设计,各层服务通过仓储接口访问基础层……'每层只能与位于其下方的层发生耦合'……严格分层架构是指任何层只能对位于其直接下方的层产生依赖……为了服务调用的可管理,我建议你采用严格分层架构",直接支撑本卡片结论。
- 原始内容:在最早的传统四层架构中,基础层被其他层依赖,位于最核心的位置,是其他各层依赖的核心。但实际上领域层才是软件的核心,所以这种依赖关系是有问题的。后来就采用了依赖倒置设计,各层服务通过仓储接口访问基础层。