9

MATLAB で中規模の解析プログラム (5 ~ 10kloc) を作成しています (私の判断ではありません)。依存性注入を使用して、コードをよりテストしやすくしようとしています。基本的なオブジェクト/コンストラクター注入モデルは理解していると思いますが、これが依存関係グラフをどのように拡大するかについては混乱しています。

たとえば、オブジェクト A があり、オブジェクト B があり、オブジェクト C があり、オブジェクト C に注入する必要がある依存関係がある場合、それをチェーン全体に渡す必要がありますか? 最終的に、これはデータ分析プログラムであるため、基本的にすべてが 1 つの AnalyzeData オブジェクト/メソッドに戻ります。これは、そのオブジェクトにプログラム全体のすべての依存関係を注入する必要があることを意味しますか?

この場合、答えは単純に ServiceFactory/ServiceProvider を使用することかもしれませんが、フレームワークなしで多くの依存関係を大きなオブジェクト グラフにスケールアップできるかどうかを知りたいです。

また、私の考え方/言い回し/基礎の修正が奨励されています - 私は基本的に Google/HN/SO を通じてこれらのほとんどを学んできました。

4

6 に答える 6

5

Matlabに依存しない回答:

(A が B を必要とする) かつ (B が C を必要とする) 場合、最初に C を作成し、次に B を作成して C を B に渡します。次に、A を作成し、(B has C) を A に渡します。

ここで、C に依存関係を注入する必要がある場合、それを D と呼びます。この一連のイベントの後でも、セッター注入を使用してこれを行うことができます。これは、依存関係が C のオプションである場合に当てはまります。それ以外の場合は、C がB に渡される前に D が注入されていないという、プログラムの初期化の欠陥である可能性があります。

(A has (B has C)) を既に持っている後に D を C に注入するためにコンストラクター注入を使用する場合は、新しい (C has D) を B に渡すためにセッター注入を使用する必要がありますが、このシーケンスイベントの数は通常、DI の有効なシナリオではありません。

于 2009-02-20T14:05:20.057 に答える
2

独自の IoC コンテナーをロールして、依存関係を注入する必要なく依存関係を要求するか、静的ゲートウェイ パターンを使用してシングルトンを取得し、ファクトリを使用してクラスを動的に作成します。

このビデオは、これらのトピックの紹介として非常に役立つことがわかりました - http://www.dnrtv.com/default.aspx?showNum=126

于 2009-02-20T14:00:19.723 に答える
2

手動で依存性注入を行う場合は、依存性を渡さないほうがよいでしょう。依存関係で C を作成し、C で B を作成し、B で A を作成するだけです。A は C やその依存関係について何も知る必要はありません。B のインターフェースについて知っているだけで、通常、依存関係はオブジェクトのインターフェースの一部ではありません。

于 2009-02-20T14:04:43.973 に答える
0

Matlab については何も知りませんが、(あなたの言葉から) オブジェクトがあると思います。その場合は、依存性注入の代わりにサービス ロケーターを使用してください。Service Locator は非常に簡単に実装できるため、フレームワークは必要ありません。

于 2009-02-20T14:11:36.937 に答える