一、解耦领域层和基础层
DDD严格的分层架构告诉我们,每一层只能与其下方的一层发生耦合。因此用户接口层只与应用层发生交互,应用层往下只与领域层发生交互,领域层往下只与基础层发生交互。
在传统的代码分层结构Controller—Service—Dao结构中,经常能看到在Service业务实现层的代码中嵌入SQL,或者在其中频繁出现修改数据对象并调用DAO的情况。这样,基础层的数据处理逻辑就渗透到了业务逻辑代码中。
在DDD的分层结构中,如果出现上述情况,则基础层的数据处理逻辑就渗透到了领域层,领域层中的领域模型就难以聚焦在业务逻辑上,对外层的基础层产生了依赖。而一旦涉及到数据逻辑的修改,就要到领域层中去修改代码,重新调试领域层与基础层的交互,或者当切换异构数据库类型时,需要大量修改领域层的代码,将业务逻辑和数据处理逻辑重新适配(主要在于异构数据库导致的SQL或数据对象调整),因此技术升级会变得特别麻烦。
本文要讲的仓储模式就是用来解耦领域层和基础层的,降低他们之间的耦合和相互影响
二、仓储模式
为了解耦领域逻辑和数据处理逻辑,在中间加了薄薄的一层仓储。
仓储模式包含仓储接口和仓储实现,仓储接口面向领域层提供基础层数据处理相关的接口,仓储实现则完成仓储接口对应的数据持久化相关的逻