Tôi sẽ triển khai một kho lưu trữ và tôi muốn sử dụng mẫu UOW vì người tiêu dùng của kho lưu trữ có thể thực hiện một số thao tác và tôi muốn cam kết chúng ngay lập tức.
Sau khi đọc một số bài viết về vấn đề này, tôi vẫn không biết làm thế nào để liên kết hai yếu tố này, tùy thuộc vào bài viết mà nó đang được thực hiện theo cách khác.
Đôi khi UOW là một cái gì đó bên trong kho lưu trữ:
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());
}
}
Và đôi khi nó là bên ngoài:
public class Repository
{
public void Save(Entity e, UnitOfWork uow)
{
uow.Track(e);
}
public void SubmittChanges(UnitOfWork uow)
{
SaveInStorage(uow.GetChanges());
}
}
Những lần khác, là UOW tham chiếu Kho lưu trữ
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());
}
}
Hai yếu tố này có liên quan như thế nào? UOW theo dõi các yếu tố cần thay đổi và kho chứa logic để duy trì các thay đổi đó, nhưng ... ai gọi ai? Liệu cuối cùng có ý nghĩa hơn?
Ngoài ra, ai quản lý kết nối? Nếu một số thao tác phải được thực hiện trong kho lưu trữ, tôi nghĩ rằng việc sử dụng cùng một kết nối và thậm chí giao dịch sẽ có âm thanh hơn, vì vậy có thể đặt đối tượng kết nối bên trong UOW và điều này cũng nằm trong kho lưu trữ.
Chúc mừng