- blogs:
- cles::blog

IoCについて調べてみる

AOPの研究絡みでJbossAOPなんかを調べていたら、いろいろなところでIoCという単語が出てきた。
ちょっと気になるのでいろいろと調べてみたら、リファクタリングなんかで有名なMartin Fowlerが書いたInversion of Control Containers and the Dependency Injection patternというものを見つけた。
† IoCとは
Spring Pad - Inversion of Control
"IoC(Inversion of Control)はデザインパターンの一種で、協調して動作する複数のコンポーネント間の依存性を非常に緩くしておくことで、各コンポーネントの再利用性を高めようというものです。各コンポーネントの依存度が下がることで、単体テストが容易になりコンポーネントの自由な結合・組み合わせも可能となります。日本語に言い換えると「制御の逆転」といった所でしょうか。"
コンポーネントの依存性を非常に緩くするという意味は、コンポーネント中で利用する他のコンポーネントを自らインスタンス化してセットするというようなことをせずに、外部(コンテナやフレームワーク)から渡されるようにデザインするということのようだ。
このように作れば、コンテナの振る舞いを変更するだけで、コンポーネント同士の依存関係を変化させることができるようになる。つまり、コンポーネント同士の依存関係の解決をコンテナに任せることによって、再利用性を高めるテクニックということのようだ。ちょっと前にXMLの定義ファイルでプログラミングができるというような話を聞いてにわかに信じられなかったのだけど、こういうことだったのか。
大きな目でとらえれば、別に降って湧いてきたきたような発想ではなくて、Servletコンテナとか、EJBコンテナなんかの系譜ででてきたものなんだろうな。
† IoCの種類
・メソッドベースIoC
・インターフェースベースIoC(Type 1)
・SetterベースIoC(Type 2)
・コンストラクタベースIoC(Type 3)
† IoCの利点
まだ、いろいろと使い込んだわけではないので予想で・・・・。
これまでアプリケーションごとに作っていた使い捨てのどでかいFactoryなんかが、定義ファイルですむようになるのはちょっとうれしいかも。あとは、AspectJのような特殊なツールを使わずにAOPができるというのもポイントになるのかな。
† 研究との接点
最初はAOPがらみの技術だと割り切って調べていたのだが、意外と「自動プログラミング」あたりに使えそう。そういえば研究リーダーのUさんは自動生成した部品を組み立てる仕組みが難しいといっていたし・・・・。意外と面白いことになりそうな予感。
† 今後の目標
いろいろあるらしいのだがseasarがちょっと面白そうなので試してみてレポートしたい。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/146
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
seasarは既にIoCコンテナからDependency Injectionコンテナになっとります。
ツッコミありがとうございます。ご指摘ごもっともですね。やっとDependency Injectionパターンについてわかってきました。
最近はSpringに手を出してみたり、自分なりにAspectを書いてみたりしています。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110912)
3 . 年次の人間ドックへ(110477)
4 . 2023 年分の確定申告完了!(1つめ)(110025)
5 . 三菱鉛筆がラミーを買収(109925)