ninject リポジトリ パターンを使用して、.net c# Mvc を使用しています。私の問題は、開発時に関数で再利用を使用しており、db からより多くの情報が必要で別のテーブルにアクセスする必要があるたびに、この関数を呼び出しているすべての場所からリポジトリを渡す必要があることです。私はそれを間違っていますか?これは、接続を開いて関数の最後に破棄する方法よりも開発に時間がかかる方法です。
2 に答える
クラスに大量のリポジトリを渡す必要がある場合、これは、クラスがあまりにも多くのことを行っており、おそらく単一責任の原則に違反していることを示している可能性があります。おそらく、このクラスをより小さな、より特化したクラスに分割したとしても、問題はそれほど深刻ではないでしょう。
一方、大量のリポジトリを渡すことは避けられない場合があります。「コンストラクタージャム」に苦しんでいるクラスを作成するファクトリークラスを作成することを検討するかもしれません-これにより、かなりのコンストラクターの初期化が1か所(ファクトリークラス内)で行われるため、入力がいくらか節約されます。
編集:本当に単純な「ファクトリー」クラスは次のようになります:
public class FactoryClass
{
public ClassWithLotsOfRepositories GetClassWithLotsOfRepositories()
{
return new ClassWithLotsOfRepositories(new repository1(),
new repository2(), new repository3() );
}
}
そのため、毎回コンストラクターでリポジトリーを指定しなくても、ClassWithLotsOfRepositories のインスタンスを作成できるようになりました。
ClassWithLotsOfRepositories myClassThatUsesLotsOfRepositories = new FactoryClass().GetClassWithLotsOfRepositories();
私の例には、コンストラクターを介して渡された具象クラスがあります。あなたはNinjectを使用しているため、おそらく解決が必要なインターフェースがあります-概念を説明するためにこの例を単純にしています。
すべてのリポジトリで新しい作業単位を使用します。そうすれば、uow をコントローラーに渡し、必要に応じてすべてのリポジトリにアクセスできます。