Saya akan mengimplementasikan repositori, dan saya ingin menggunakan pola UOW karena konsumen repositori dapat melakukan beberapa operasi, dan saya ingin mengkomitnya sekaligus.
Setelah membaca beberapa artikel tentang masalah ini, saya masih belum mengerti bagaimana menghubungkan kedua elemen ini, tergantung pada artikel yang sedang dikerjakan dengan cara yang lain.
Kadang-kadang UOW adalah sesuatu yang internal ke repositori:
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());
}
}
Dan terkadang itu eksternal:
public class Repository
{
public void Save(Entity e, UnitOfWork uow)
{
uow.Track(e);
}
public void SubmittChanges(UnitOfWork uow)
{
SaveInStorage(uow.GetChanges());
}
}
Di waktu lain, adalah UOW yang mereferensikan Repositori
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());
}
}
Bagaimana kedua elemen ini terkait? UOW melacak elemen yang perlu diubah, dan repositori berisi logika untuk mempertahankan perubahan itu, tapi ... siapa yang memanggil siapa? Apakah yang terakhir lebih masuk akal?
Juga, siapa yang mengelola koneksi? Jika beberapa operasi harus dilakukan dalam repositori, saya pikir menggunakan koneksi yang sama dan bahkan transaksi lebih banyak suara, jadi mungkin menempatkan objek koneksi di dalam UOW dan yang ini di dalam repositori juga masuk akal.
Bersulang