派生の抑制

OOPで、それも静的な言語を使うシステムでは、どんなに上手く設計したインタフェースやクラスであっても(上手く設計したからこそ)開発していく途中で必ず派生物を作成する必要が出てくる。(継承という概念があるので派生物を作るのを前提で設計しているともいえる)

DIコンテナ以前はクラスに新たな機能を追加した場合、それを使うためにはその機能をなんらかの形で公開する必要があった。クラスを拡張する、インタフェースを変更する。そうしないと新しい機能を使うことができないからだ。しかし、当たり前だがこの方法では全てのアプリケーションをビルドしなくてはならないしインタフェースの変更はその実装クラス全ての変更を余儀なくされる。

派生物が増えることにより、確実に可読性と保守性は下がっていくのだ。(特に他人が書いた派生物の可読性は落ちる傾向にある)

別に派生自体が悪いと言っている訳ではないので念のため。

避けたいのは必ずしも全てのアプリケーションからアクセスする必要は無いかもしれない、ちょっとしたことの為に公開されているクラスなりインタフェースを変更してしまうことだ。けれどアクセスできない限りは外部から設定ができない訳で、その理由だけにインタフェースを変更したりしていた訳だ。(新たに用意したXMLファイルや、プロパティファイルを使うことも含む)

体験上、DIコンテナはこのような派生が必要となる機会を抑えてくれる。DIコンテナはインタフェースの実装をアプリケーションから分離することを可能としているが、それ以外にもインタフェースに定義していない属性や、新たに実装に追加された属性をアプリケーション外部から簡単に設定することが可能になるからだ。