5

DI 以外のシステムをプログラミングするときに私が覚えていた比喩は、「おもちゃで遊んでいる人」です。人はオブジェクトであり、人のおもちゃはオブジェクトが作成、保存、初期化、および操作するものです。おもちゃは、特定の状態に達するとイベントを送信できますが、使用者については何も知りません。それらは、インターフェイスを構成するコントロール スイッチを備えた小さなブラック ボックスです。ユーザーは、おもちゃからのイベントをリッスンし、インターフェイスを操作して応答できます。人は自分のおもちゃでやりたいことを何でもできますが、壊れる可能性があるため、内部に干渉するべきではないでしょう。

DI が私の比喩にもたらした大混乱は、玩具が、その所有者、つまり使用者を知っている意識のある存在に変わってしまうことです。おもちゃはこの人を操作することができますが、その人はおもちゃがどのように機能するかを何も知らず、気にもかけません。その人はおもちゃを所有しているだけで、おもちゃが自分を満足させるように操作してくれることを期待しています。

なに?それは恐ろしいですね!
DIシステムがどのように機能するかを考えるために、彼らが使用している優れた精神的な比喩は何ですか?

4

8 に答える 8

11

紳士と執事を考えてみてください。バトラー (DI フレームワーク) は、要求に応じて紳士に必要なサービス (外部依存関係) を提供します (また、朝のコーヒーのように、「初期化」時にいくつかのサービスを提供します:-))。紳士 (あなたのクラス) はサービスを消費するだけで、要求を満たしている (特定のインターフェイスを実装している) 限り、それらがどこから来たのかは気にしません。

または、メタファーに近づけたい場合は、クラスが子供、DI フレームワークが母親、おもちゃがその他のコンポーネントです。子供は、好きなように遊べる限り、おもちゃがどこから来ても気にしません。

于 2009-10-10T17:54:17.943 に答える
3

SOLID の動機付けの画像は良い情報源です。

依存性注入原理の比喩

于 2009-10-10T18:01:56.947 に答える
2

レゴ。

レゴ ブロックは、1 つまたは複数のインターフェイス (上部の小さな隆起) を公開し、1 つまたは複数のセッターまたはコンストラクター引数 (下部の穴) を持つソフトウェア コンポーネントと考えてください。

レゴの箱を購入した場合、ブロックは組み立て済み (配線済み) ではありません。それらは独立したコンポーネントです。次に、インターフェイス (バンプ) をセッター/コンストラクター (穴) に接続して、それらを組み立てます (配線します)。各ブロックは、他のブロックについて直接何も知りません。それらを組み立てるには、ブロック以外のものが必要です-つまり、あなた(またはmain()またはSpring構成ファイルなど)です。

私は知っています...レゴは主に統一されたインターフェースを持っているので、これは少し壊れています-しかし、それは私にとってはうまくいきます:-)

于 2009-10-10T17:57:26.563 に答える
2

私はコンピュータシステムを使用しています。システム ブロックがあり、あなた (DI) はそれにモニター、キーボード、マウスを接続します。システム ブロックは、モニターが DVI デバイスであることを認識しているだけで、正確にどのモニターであるかは気にしません。USB マウスの使い方は知っていますが、それが光学式マウスであるかボール回転マウスであるかを知りません。

あなた - DI フレームワーク。
システム ブロック - サービス対象のシステムです。
モニター/マウス/キーボード - DI (ユーザー) がシステム ブロックに提供するサービス。

于 2009-10-10T17:59:34.220 に答える
2

私の見解では、メタファーに関する DI と非 DI の違いは、非 DI システムの場合です。各人は自分のおもちゃを作成します。作成方法を知らなければならず、作成したおもちゃしか使用できません。DI では、与えられたおもちゃを使用します。作り方はわかりませんが、おもちゃがどのように振る舞うかを知っている限り、与えられたおもちゃで遊ぶことができます。

于 2009-10-10T17:53:03.237 に答える
1

私が言われた DI の比喩の 1 つは、それを CD プレーヤーの比喩に関連付けることでした。プレーヤーは、どの CD を挿入してもかまいません。ただし、プレーヤーに挿入する各 CD は、プレーヤーが必要とするものに基づいて、さまざまな機能を提供します。

于 2009-10-10T18:00:23.063 に答える
1

おもちゃは意識していません。彼らは、人にひもをフックに結びつけさせ、特定のことが起こると、フックが回転してひもが引っ張られるので、人は何かが起こったことを知ることができます.

于 2009-10-10T17:50:00.213 に答える
0

サムライと武器がすべてです。ninject: http://ninject.org/をチェックしてみてください。興味深い比喩については、「Visit the Dojo」のキャラクターに移動してください。これがあなたの意図したものかどうかはわかりませんが、それにもかかわらず、それは創造的です.

于 2009-10-10T17:55:51.013 に答える