StructureMapのようなIoCフレームワークの使用法を理解しようとしていますが、これらの「デザインパターン」は単なるナンセンスであり、コードがさらに複雑になっていると考えざるを得ません。
IoCがいくらか役立つと思う例から始めましょう。
IoCは、MVCフレームワークでコントローラークラスのインスタンス化を処理するときに役立つと思います。この場合、私は.NETMVCフレームワークについて考えています。
通常、コントローラークラスのインスタンス化はフレームワークによって処理されます。つまり、コントローラークラスのコンストラクターにパラメーターを実際に渡すことはできません。これは、IoCフレームワークが役立つ場合があります。IoCコンテナのどこかで、constructor
コントローラクラスが呼び出されたときにインスタンス化してコントローラに渡すクラスを指定します。
これは、コントローラーに渡されたオブジェクトをモックできるため、コントローラーを単体テストする場合にも便利です。
しかし、私が言ったように、なぜ人々がコントローラークラスにそれを使用したいのかはある程度理解できます。しかし、それ以外ではありません。そこから、通常の依存性注入を簡単に実行できます。
しかし、なぜ単純にこのようにしないのですか?
public class SomeController
{
public SomeController() : this( new SomeObj() )
{
}
publiv SomeController(SomeObj obj)
{
this.obj = obj;
}
}
これで、サードパーティのIoCフレームワークを使用する必要がなくなり、学習曲線も短くなります。そのフレームワークの仕様にも入る必要がないので。
ユニットテストでオブジェクトをモックすることはできます。だから問題ありません。
あなたが言える唯一のことは、「しかし今、あなたのクラスは緊密に結びついてSomeObj
いる」ということです。これは本当です。しかし、誰が気にしますか!?コントローラークラスです!私はそのクラスを再利用するつもりはありません..それで、なぜ私はその緊密な結合について心配する必要があります..?渡されたオブジェクトをモックできます。それが唯一の重要なことです。
では、なぜわざわざIoCを使用する必要があるのでしょうか。私は本当にポイントを逃していますか...?私にとって、IoCパターンは過大評価されたパターンにすぎません。アプリケーションにさらに複雑なレイヤーを追加しています...