我将实现一个存储库,并且我想使用UOW模式,因为该存储库的使用者可以执行多个操作,因此我想一次提交它们。
在阅读了有关该问题的几篇文章之后,我仍然不知道如何将这两个元素联系起来,具体取决于文章是通过其他方式完成的。
有时,UOW是存储库内部的内容:
public class Repository
{
UnitOfWork _uow;
public Repository()
{
_uow = IoC.Get<UnitOfWork>();
}
public void Save(Entity e)
{
_uow.Track(e);
}
public void SubmittChanges()
{
SaveInStorage(_uow.GetChanges());
}
}
有时它是外部的:
public class Repository
{
public void Save(Entity e, UnitOfWork uow)
{
uow.Track(e);
}
public void SubmittChanges(UnitOfWork uow)
{
SaveInStorage(uow.GetChanges());
}
}
其他时候,是UOW引用存储库的吗
public class UnitOfWork
{
Repository _repository;
public UnitOfWork(Repository repository)
{
_repository = repository;
}
public void Save(Entity e)
{
this.Track(e);
}
public void SubmittChanges()
{
_repository.Save(this.GetChanges());
}
}
这两个要素有何关系?UOW跟踪需要更改的元素,并且存储库包含保持这些更改的逻辑,但是...谁叫谁?最后一个更有意义吗?
另外,谁来管理连接?如果必须在存储库中执行几项操作,我认为使用相同的连接甚至事务处理都比较合理,因此也许将连接对象放在UOW内,而将这个对象放在存储库内也很有意义。
干杯