我注意到库通常在以下任一方式实现:DDD:存储库是内存中的对象集合吗?
方法1
void Add(object obj);
void Remove(object obj);
object GetBy(int id);
方法2
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对它们进行建模。
您对此有何看法?
MOSH
我使用第一个选项,我很满意它。我目前正在使用NHibernate,所以UoW是免费的。 – goenning 2011-11-17 15:50:00