BLOGTIMES
2004/04/26

IoCについて調べてみる

  aop 
このエントリーをはてなブックマークに追加

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:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/146
    Trackbacks
    このエントリにトラックバックはありません
    Local Trackbacks
    昨日も書きましたが、今日から会社を3日ばかり休んで、神奈川県の葉山の某所で行われている研究室の合宿に参加してきます((発表とかは特にしないのでゲスト参加です))。僕が学部の時の研究室に夏合宿はなかったの...
    (2004-08-09)
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    kdmsnr (2004/05/06 10:03) <%HatenaAuth()%>

    seasarは既にIoCコンテナからDependency Injectionコンテナになっとります。

    hsur (2004/05/06 21:06) <%HatenaAuth()%>

    ツッコミありがとうございます。ご指摘ごもっともですね。やっとDependency Injectionパターンについてわかってきました。
    最近はSpringに手を出してみたり、自分なりにAspectを書いてみたりしています。

    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン