リポジトリを実装します。リポジトリのコンシューマは複数の操作を実行でき、一度にコミットしたいので、UOWパターンを使用したいと思います。
問題に関するいくつかの記事を読んだ後、他の方法で行われている記事によっては、この2つの要素を関連付ける方法がまだわかりません。
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());
}
}
これら2つの要素はどのように関連していますか?UOWは変更が必要な要素を追跡し、リポジトリにはそれらの変更を保持するためのロジックが含まれていますが、誰が誰と呼んでいますか?最後の方が理にかなっていますか?
また、誰が接続を管理しますか?リポジトリで複数の操作を実行する必要がある場合、同じ接続を使用し、トランザクションでさえより健全であると思うので、接続オブジェクトをUOW内に配置し、リポジトリ内のこのオブジェクトも同様に意味があります。
乾杯