私はStructureMapのようなIoCフレームワークの使い方を理解しようとしていますが、これらの "デザインパターン"は単なるナンセンスなので、コードをもっと複雑にするとは考えられません。MVCアプリケーションでIoCフレームワークを使用するとは何ですか?
私はIoCがやや便利だと思う例から始めましょう。
MVCフレームワークでコントローラクラスのインスタンス化を扱うときは、IoCが役に立ちます。この場合、私は.NET MVCフレームワークについて考えています。
通常、コントローラクラスのインスタンス化はフレームワークによって処理されます。つまり、コントローラクラスのコンストラクタに実際にパラメータを渡すことはできません。 これは、IoCフレームワークが便利な場所です。 IoCコンテナのどこかで、コントローラクラスが呼び出されるときに、どのクラスをインスタンス化してコントローラに渡すかを指定します(constructor
)。
これは、渡されたオブジェクトをモックすることができるので、コントローラをユニットテストするときにも便利です。
しかし、私が言ったように、なぜ人々がコントローラークラスのためにそれを使用したいのか分かります。しかし、それ以外ではありません。そこからあなたは単に普通のことをすることができます依存性注入。
しかし、単にこのようにそれをしない理由:
public class SomeController
{
public SomeController() : this(new SomeObj())
{
}
publiv SomeController(SomeObj obj)
{
this.obj = obj;
}
}
今、あなたはまた、より低い学習曲線を意味任意のサードパーティ製のIoCフレームワークを使用する必要はありません。あなたはそのフレームワークの仕様にも入る必要はないからです。
ユニットテストでもオブジェクトをモックできます。だから問題はない。
「あなたのクラスはが密接に〜SomeObj
になりました」としか言えません。 これは本当です。しかし、誰が気に!これはコントローラクラスです!私はそのクラスをいつも再利用するつもりはない。だから、どうしてこのタイトなカップリングについて心配すべきなのか?私はそれに渡されるオブジェクトを模擬することができます。それが唯一の重要なことです。
なぜIoCを使用するのはどうですか?私は本当にポイントを逃しています...?私にとっては、IoCパターンは過大評価されたパターンです。アプリケーションにもっと複雑なレイヤーを追加する...
@HenkHolterman誰かが、なぜ私のアプローチが間違っているのか、どのような状況にあるのか、という良い議論がある場合は必ずしもそうではありません。私は誰とも議論するつもりはない。この問題についてアドバイスを探しているだけです。 – w00
[なぜ簡単なDIコードではなくIoCコンテナが必要なのですか?](http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposedストレートフォワード・ダイ・コード) –