Zamierzam zaimplementować repozytorium i chciałbym użyć wzorca UOW, ponieważ konsument repozytorium może wykonać kilka operacji i chcę je zatwierdzić jednocześnie.
Po przeczytaniu kilku artykułów na ten temat, nadal nie rozumiem, jak powiązać te dwa elementy, w zależności od artykułu, który jest robiony w inny sposób.
Czasami UOW jest czymś wewnętrznym dla repozytorium:
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());
}
}
A czasem ma charakter zewnętrzny:
public class Repository
{
public void Save(Entity e, UnitOfWork uow)
{
uow.Track(e);
}
public void SubmittChanges(UnitOfWork uow)
{
SaveInStorage(uow.GetChanges());
}
}
Innym razem jest jednostka organizacyjna, która odwołuje się do repozytorium
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());
}
}
Jak te dwa elementy są powiązane? UOW śledzi elementy, które należy zmienić, a repozytorium zawiera logikę, aby zachować te zmiany, ale ... kto nazywa kogo? Czy ostatnie mają większy sens?
Kto zarządza połączeniem? Jeśli w repozytorium trzeba wykonać kilka operacji, myślę, że użycie tego samego połączenia, a nawet transakcja, to więcej dźwięku, więc może umieść obiekt połączenia w UOW, a ten w repozytorium również ma sens.
Twoje zdrowie