: O. Yuanying

ライブラリとフレームワークの違い・2

Martin Fowler's Blikiの中のInversionOfControlという記事から。

制御の逆転は、フレームワークをライブラリと差別化する重要な部分だ。ライブラリとは、基本的に呼び出し可能な関数で、最近ではクラスで構成されている。関数への呼び出しは、何らかの作業を行った後で、クライアントに制御を返す。

一方、フレームワークとは、抽象的な設計であり、振る舞いのパターンが組み込まれている。実際に使うには、フレームワークの様々な所に、振る舞いを差し込む必要がある。差し込みはサブクラス化か、または貴方自身のクラスにプラグインすることによって行われる。フレームワークのコードは、貴方のコードを要所要所で呼び出すのだ。

ライブラリが普通のプログラムから普通の手順で呼び出されるのに比べれば、フレームワークとは制御の反転である。

最近、IoCコンテナの盛り上がりにより、制御の逆転の意味をめぐっていくつかの混乱がある。ここで挙げた一般的な原則を、依存性注入(dependency injection)*1のような特化したスタイルの制御の逆転と混同している人がいる。とあるが、これがSpringなどのDIコンテナを、IoCコンテナと呼ばずDIコンテナと呼ぶようになった一つの理由なんだろうか。