存储库应该是加载还是保存实体?

时间:2010-08-16 06:11:44

标签: domain-driven-design

在我的设计中,我有从数据库中获取实体的Repository类(它是如何做的并不重要)。但是为了将实体保存回数据库,使存储库也这样做是否有意义?或者更有意义的是创建另一个类(例如UnitOfWork),并让它负责通过让它接受实体来保存东西,并通过调用它上面的save()告诉它继续执行它的魔力?

3 个答案:

答案 0 :(得分:5)

在DDD中,存储库肯定是所有与持久性相关的东西所在的位置。

如果您已经封装在多个类中的数据库中保存并加载,则与数据库相关的代码将分布在代码库中的太多位置 - 从而使维护变得更加困难。此外,此代码的后期读者很可能一眼就看不懂,因为这样的设计不符合大多数开发人员期望找到的准标准。

当然,如果您的项目适合,您可以拥有单独的Reader / Writer-helper类。但从业务层看,持久化的唯一门户应该是存储库...

HTH!
托马斯

答案 1 :(得分:1)

我会让存储库全面负责封装加载和保存的所有方面。这确保了诸如管理读者和写入之间的争用等棘手问题可以进行管理。

存储库可能会使用您的UnitOfWork类,并且可能需要公开BeginUow和Commit方法。

答案 2 :(得分:1)

Fowler says存储库api应该模仿集合:

  

存储库在域和数据映射层之间进行调解,其作用类似于内存中域对象集合