Я собираюсь реализовать репозиторий, и я хотел бы использовать шаблон 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, и этот объект в репозитории также имеет смысл.
ура