知识卡片
应用服务可以跳过领域层直接调用仓储:数据访问不等于业务逻辑
内容
应用服务在微服务内的调用路径通常有两种。第一种是最常见的路径:应用服务调用并组装领域服务,领域服务再组装实体和实体方法完成核心领域逻辑,领域服务通过工厂服务和仓储接口获取持久化数据、完成实体构建。第二种路径则是应用服务绕开领域层,直接调用仓储服务——这种路径主要针对类似缓存、文件这类基础层数据访问,或者涉及多表关联的复杂查询操作。之所以允许这条”抄近路”,是因为这些数据查询类操作本身没有太多需要业务规则约束的领域逻辑,既然不涉及需要被保护的业务不变性,就没有必要强行绕道领域层走一圈再回来。这条设计和[[复杂多表查询不放进领域层查询不需要领域逻辑约束]]共享同一个判断依据:决定一次数据访问该不该经过领域层,看的不是”这次访问是否触碰了业务数据”,而是”这次访问是否需要领域层承担的业务规则校验职能”——如果答案是否,让应用服务直接访问仓储服务,反而比强行绕经领域层再返回更直接、也不会给领域层徒增和核心业务逻辑无关的查询代码。
参考来源
- 位置:第17章《服务和数据在微服务各层的协作》"17.1.2 服务的调用"(源文件:_epub-src/OEBPS/Text/chapter4-6-1-2.xhtml)
- 结论依据:原文说明"第二种是应用服务直接调用仓储服务。这种方式主要针对类似缓存或文件等类型的基础层数据访问,或者涉及多表关联的复杂数据查询操作。这些数据查询类操作,由于没有太多需要进行业务规则控制的领域逻辑,所以不需要经过领域层",直接支撑本卡片结论。
- 原始内容:第二种是应用服务直接调用仓储服务。这种方式主要针对类似缓存或文件等类型的基础层数据访问,或者涉及多表关联的复杂数据查询操作。这些数据查询类操作,由于没有太多需要进行业务规则控制的领域逻辑,所以不需要经过领域层。