私はUnitOfWorkとRepo Patternについてウェブ上で多く見ましたが、なぜ、どのように使用するのかはまだ分かりません。UnitOfWorkをリポジトリパターンとともに使用する理由は何ですか?
私はこの記事で提案されているようにDIを使ってIoCを使用してリポジトリをテスト可能にすることができると考えています。What are best practices for managing DataContext私はそうのようにそれを廃棄その後、私のリポジトリコンストラクタへの依存としてコンテキストを渡して検討している?:
public interface ICustomObjectContext : IDisposable {}
public IRepository<T> // Not sure if I need to reference IDisposable here
public IMyRepository : IRepository<MyRepository> {}
public class MyRepository : IMyRepository
{
private readonly ICustomObjectContext _customObjectContext;
public MyRepository(ICustomObjectContext customObjectContext)
{
_customObjectContext = customObjectContext;
}
public void Dispose()
{
if (_customObjectContext != null)
{
_customObjectContext.Dispose();
}
}
...
}
リポジトリパターンとのUnitOfWorkを使用しての私の現在の理解を、複数のリポジトリ間で操作を実行することです - この動作は、@ Ladislav Mrnkaがウェブアプリケーションに対して推奨するものと矛盾するようです。
Webアプリケーションの場合、リクエストごとに単一のコンテキストを使用します。 Webサービスでは、コールごとに単一のコンテキストを使用します。 WinFormsまたはWPFアプリケーションでは、フォームまたはプレゼンターごとに単一のコンテキストを使用します。このアプローチを使用することを許さないいくつかの特別な要件がありますが、ほとんどの状況でこれで十分です。
は(だけでなく他の記事でこれを見た)私が正しく、彼を理解している場合のDataContextが要求またはプレゼンターごとに短命と使用されるべき完全な答えhere
を参照してください。この場合、スコープはそれを使用しているコンポーネントに限定されているため、リポジトリはコンテキストに対して操作を実行することが適切です。
私のリポジトリは一時的なものとしてIoCに登録されているので、リクエストごとに新しいリポジトリを取得する必要があります。それが正しいならば、私は各要求と共に新しい文脈(上のコードで)を得て、それを廃棄しなければならないと言いました... なぜ私はUnitOfWorkパターンをリポジトリパターンで使用しますか?上記の条約に従う?
それだけあなたの質問に関連していない:
コードは次のようになります。しかし、あなたがこのクラスに依存関係として注入クラス内のオブジェクトを配置することは非常に悪に見えます。クラスはオブジェクトをインスタンス化することは明らかではないので、それを処理する責任はありません。 – Slauma
ありがとう@Slaumaは、これに関するWouterの注記に注目しました。私はそれを修正する必要があります。 – Rich