리포지토리를 구현하려고하며 리포지토리 소비자가 여러 작업을 수행 할 수 있기 때문에 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 내부에 넣고 저장소 내부의 개체도 의미가 있습니다.
건배