我再次阅读埃文斯书中关于存储库的章节,我还不清楚以下问题:
当我对从存储库获取的实体进行修改时,是否需要将实体放回存储库?存储库是否知道它重构的实体? (很明显,如果我没有修改从存储库中检索到的实体,则无需将实体添加回它)
由于
答案 0 :(得分:3)
你可以肯定在你的存储库上有一个Save()方法但是为了很好地分离关注点,我发现在工作单元中处理变更跟踪和持久性会更好。大多数ORM允许您一次性保存属于业务事务的所有已修改实体,或者临时保存单个实体。
请参阅http://richarddingwall.name/2009/10/22/repositories-dont-have-save-methods/
http://odetocode.com/blogs/scott/archive/2010/06/13/repositories-and-the-save-method.aspx
答案 1 :(得分:1)
存储库通常包含一个包含Save,Update和Delete等方法的接口。所以,是的,客户端(域层)通常会通过在存储库中调用这些方法来“将实体放回”存储库。
如果您的域代码在给定路径中知道不会进行任何更改,那么它肯定不需要再次调用更新/保存方法。但是,如果您不确定,调用这些方法并让存储库决定如何(或是否)更新基础数据存储可能是有意义的。
实现存储库及其与底层数据访问层和数据存储的交互有多种方法。从理论上讲,您可以使用您认为最佳的方法来实现此功能。例如,存储库可以查询数据存储并执行比较并查找更改。然而,实际上,许多实现使用实体上的数据跟踪(例如,IsDirty()或isModified())来帮助存储库知道实体是否被域层改变以及是否需要更新。
希望这有助于提供一些方向。