フィールドインジェクション何故あるのか?

便利。只、この一言に尽きます。

少なくとも、S2TestCaseは、最初のリリースの頃から、サブクラスのインスタンスに対して、
フィールドインジェクションしてました。マジ便利。チョー便利。色々楽出来る。
今は、コンテナの本体にもその機能がありますよってだけ。


デメリットは、DIコンテナのユーザにDIコンテナでしか出来ない
DIコンテナゾーン的思考を要求する事。


これは、便利さとゾーンのバランスの問題なんだけど、
ライブラリやフレームワークの類は、高機能化すればする程、そのゾーンは強くなります。


少なくとも、DIコンテナの挙動は、概念レベルで既に一般的知識とは言い難いと思います。
別に難しいとかそういう事では無くて、知ってる人が少ないってだけ。
確かに、実質的に使わないのと同じ様な、DIの為だけのアクセッサーと言うのも、
コストの様に感じますが、それはDIに慣れているからです。つまり既にゾーンの中に居ます。


DIコンテナに初めて触る人なら、アクセッサー経由で依存リソースのインスタンスが、
DIされるだけでも十分に理解の外側なのに、そのアクセッサーまで無くしてしまっては、
普通には着いて来れないかもしれない…と言う危惧が常にあります。


はっきり言って、ある閾値を越えるとコーディングのコストなんぞ、誤差になると思います。
それ以上に恐ろしいのは、テクノロジを使うのでは無く、
テクノロジに使われる状態になるプログラマがプロジェクト内に増える事です。
つまり、テクノロジ自体を理解する事に関するコストの方が高くなる事です。
無駄にコードを書きまくるのもいけないし、
色々突き詰めすぎてコードを書かないのもいけないんじゃないかなぁ…と。


機能自体に善悪はありませんが、それを使うか否かはしっかりと見極めた方が良いかと。