0

複数のファクトリ実装があり、それぞれが新しいオブジェクトを作成するために異なる状態情報を必要とする場合、どのパターンを使用しますか?

例: IModelParameters: 複雑な計算へのすべての入力と出力が含まれます。 IModelParameterFactory: IModelParameter オブジェクトを取得および保存するためのメソッドがあります。

問題は、あるファクトリ実装がデータベースからパラメーターを取得し、取得に必要な状態 (つまり、UserID) を取得している可能性があることと、別のファクトリ実装がファイルから入力を取得している可能性があることです。この場合、UserID はありません。ただし、ファイル名が必要です。

この場合、よりうまく機能する別のパターンはありますか? 私はいくつかの依存性注入ツール/ライブラリを見てきましたが、状況に対処していると思われるものは何も見ていません。

4

3 に答える 3

0

リクエストをクラスに入れようとしましたか?

すべてのファクトリ実装には独自の要求がありますが、すべての要求クラスは基本要求クラスから派生します (または要求インターフェースを実装します)。これにより、すべてのファクトリ実装に対して同じインターフェイスを持つことができます。すべてのファクトリ実装で正しい requeriments クラスにキャストする必要があります。

はい、キャストは見苦しく、エラーが発生しやすいですが、このメソッドはファクトリに統一された拡張可能なインターフェイスを提供します。

于 2013-05-20T19:00:18.860 に答える
0

私の見解では、状態とは、静的オブジェクト、グローバル変数、キャッシュ、セッションなど、メモリに保存するものです。通常 DI では、このような状態は保持されず、パラメーターとして渡されます。例:

public IEnumerable<Records> GetRecordByUserId(string userId){ /*code*/ }

リポジトリに保持される代わりに、userId が渡されます。

ただし、クエリを実行するたびに渡すのではなく、構成のようなものにしたい場合は、ラッパークラスとして注入できると思います。詳細については、私の質問を参照してください。ただし、この設計はリポジトリではお勧めしませんが、サービス レベルではお勧めします。

于 2013-05-21T02:15:55.357 に答える