在我的设计中,我有从数据库中获取实体的Repository类(它是如何做的并不重要)。但是为了将实体保存回数据库,使存储库也这样做是否有意义?或者更有意义的是创建另一个类(例如UnitOfWork),并让它负责通过让它接受实体来保存东西,并通过调用它上面的save()
告诉它继续执行它的魔力?
答案 0 :(得分:5)
在DDD中,存储库肯定是所有与持久性相关的东西所在的位置。
如果您已经封装在多个类中的数据库中保存并加载,则与数据库相关的代码将分布在代码库中的太多位置 - 从而使维护变得更加困难。此外,此代码的后期读者很可能一眼就看不懂,因为这样的设计不符合大多数开发人员期望找到的准标准。
当然,如果您的项目适合,您可以拥有单独的Reader / Writer-helper类。但从业务层看,持久化的唯一门户应该是存储库...
HTH!
托马斯
答案 1 :(得分:1)
我会让存储库全面负责封装加载和保存的所有方面。这确保了诸如管理读者和写入之间的争用等棘手问题可以进行管理。
存储库可能会使用您的UnitOfWork类,并且可能需要公开BeginUow和Commit方法。
答案 2 :(得分:1)
Fowler says存储库api应该模仿集合:
存储库在域和数据映射层之间进行调解,其作用类似于内存中域对象集合。