1

同じコードを共有する 2 つの製品ラインに取り組んでいます。

異なる機能については、両方の製品ラインで同じインターフェイス (場合によっては基本クラス) を実装し、これらの型を Main クラス (両方の製品ラインで別々) で作成し、さらに下流に渡します。

ビジネス ロジックの奥深くにあるコードの場合、製品ライン固有のコードを作成するのは非常に困難です。if(ProductLine == "ProductLine1") および else 方法論は使用したくありません。

そこで、NewObject1()、NewObject2() などを返す静的メソッドを持つ Factory クラスを実装することを計画しています。この Factory クラスは、Main クラスに Factory.RegisterClient(ProductLine1) として登録されます。

したがって、上記のアプローチでは、ファクトリ (内部に ProductLine1Factor と ProductLine2Factory を含む) は、作成するオブジェクトのタイプを認識します。

この問題に対するより良いアプローチを知っていますか。ProductLine1 はすでに存在し、ProductLine2 は新しいものであることに注意してください (ただし、ProductLine1 と 90% 類似しています)。両方の製品ラインが存在するような抜本的なリファクタリングはできません。コードの変更はできるだけ最小限に抑えたいと考えています。

通常、ファクトリ アプローチはインターフェイスを公開しますが、インターフェイスの問題は、必要な静的型を公開できないことです。

一部の専門家が光を当てることができれば、本当に感謝しています。

4

1 に答える 1

1

あなたのアプローチはうまく聞こえます。

カスタム クラフト ファクトリの代わりに、NInject や Unity などの本格的な IoC フレームワークを使用してみませんか? クライアントごとにサービスを 2 回実装し、コンテナー構成ファイルで 1 つを静的に選択することができます。この方法では、さらに別の実装を追加する場合、コードの 1 行を変更する必要さえありません。再構成するだけです。つまり、xml ファイルにいくつかの変更を加えます。

とにかく、IoC コンテナーは単なるツールであり、使用するかどうかに関係なく、工場を置き換えるだけです (IoC コンテナーは「強化された工場」と呼ばれることもあります)。

于 2013-03-20T20:39:49.770 に答える