DDD领域对象双库写入场景下,应使用多少个Repository?
从DDD角度看双数据库写入的Repository方案选择
从DDD的核心原则出发,方案一是更合理的选择,原因如下:
- Repository的本质是领域层的抽象,核心职责是封装聚合根(AG)的持久化细节,让领域模型完全不用关心数据的存储介质、存储方式这类技术细节。你的场景只有写入操作,领域层只需要明确“调用Repository的保存方法,就能完成聚合根状态的持久化”,至于要写入两个数据库,这属于基础设施层的实现细节,不该暴露给领域层。
- 方案一把双库写入的逻辑封装在Repository的具体实现中(属于基础设施层),领域层和应用层只需要调用同一个Repository的
save()方法即可,完全感知不到多数据库的存在,完美契合DDD“关注点分离”和“封装”的核心思想。 - 如果采用方案二,意味着应用层甚至领域层需要手动调用两个Repository的保存方法,这就把底层存储的技术细节泄露到了上层,等于让领域逻辑被迫知晓“数据要存两个地方”这件事,直接违背了Repository设计的初衷——Repository就是用来屏蔽存储细节的。
- 从维护性角度看,方案一后续如果要新增第三个存储源,只需要修改Repository的实现类,上层的领域代码完全不用变动;而方案二的话,上层的调用逻辑也得跟着修改,不符合开闭原则。
内容的提问来源于stack exchange,提问作者user11081980
相关产品推荐
相关产品推荐

