Ich werde ein Repository implementieren, und ich möchte das UOW-Muster verwenden, da der Konsument des Repository mehrere Operationen ausführen kann, und ich möchte sie gleichzeitig festschreiben.
Nachdem ich mehrere Artikel über die Angelegenheit gelesen habe, verstehe ich immer noch nicht, wie ich diese beiden Elemente in Beziehung setzen soll, je nachdem, wie der Artikel in einer anderen Weise ausgeführt wird.
Manchmal ist das UOW etwas internes im Repository:
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());
}
}
Und manchmal ist es extern:
public class Repository
{
public void Save(Entity e, UnitOfWork uow)
{
uow.Track(e);
}
public void SubmittChanges(UnitOfWork uow)
{
SaveInStorage(uow.GetChanges());
}
}
Ein anderes Mal ist das UOW, das auf das Repository verweist
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());
}
}
Wie hängen diese beiden Elemente zusammen? UOW verfolgt die Elemente, die geändert werden müssen, und das Repository enthält die Logik, um diese Änderungen beizubehalten, aber ... wer ruft wen an? Macht das letztere mehr Sinn?
Wer verwaltet die Verbindung? Wenn mehrere Vorgänge im Repository ausgeführt werden müssen, ist die Verwendung derselben Verbindung und sogar der Transaktion meines Erachtens sinnvoller. Platzieren Sie daher möglicherweise das Verbindungsobjekt in der UOW, und dieses Objekt im Repository ist ebenfalls sinnvoll.
Prost