我注意到存储库通常以以下任一方式实现:
方法一
void Add(object obj);
void Remove(object obj);
object GetBy(int id);
方法二
void Save(object obj); // Used both for Insert and Update scenarios
void Remove(object obj);
object GetBy(int id);
方法 1 具有集合语义(这是定义存储库的方式)。我们可以从存储库中获取一个对象并对其进行修改。但我们不会告诉集合更新它。以这种方式实现存储库需要另一种机制来持久化对内存对象所做的更改。据我所知,这是使用工作单元完成的。但是,有些人认为只有当您需要系统中的事务控制时才需要 UoW。
方法 2 消除了拥有 UoW 的需要。您可以调用 Save() 方法,它会确定对象是新对象并且应该被插入还是被修改并且应该被更新。然后它使用数据映射器将更改持久保存到数据库中。虽然这使生活变得更加轻松,但建模的存储库没有集合语义。该模型具有 DAO 语义。
我真的很困惑。如果存储库模拟内存中的对象集合,那么我们应该根据方法 1 对它们进行建模。
您对此有何看法?
莫什