1.プラグイン的な構造で提供されているプロダクト
1.1.Eclipse
Eclipse がプラグインとして機能を自在に追加する機能があり、またそのプラグインを開発者が自由に開発可能なことは比較的有名ですが、Eclipse の Java 開発部分もプラグインとして(JDT というプラグイン)初期状態に組み込まれていることを知っている人は少ないと思います。C/C++ 言語や PHP 、さらには COBOL の開発環境までプラグイン化されているますが、初期状態で組み込まれているものが C/C++ のものであったら現在ほど Eclipse が開発環境としてメジャになったかどうかは怪しいと思います。
1.2.JBoss
オープンソースの J2EE サーバとして最近注目されている JBoss もプラグイン的な構造で作られています。こちらは MBean(Managed Bean) という Java Beans に似た軽量なコンポーネントを組み合わせて全体を構成する設計となっています。この MBean というのは Java の規格である JMX(Java Management Extensions) に沿ったものです。新しく機能追加する場合も、既にあるサービスを JBoss に組み込む場合でも MBean によってラップすることで簡単に追加することができます。
2.結論
つまり、プラグインとして後から機能を追加することができるプロダクトというものは、「
本体そのものもプラグイン化されている」という事実があります。本体そのものをプラグイン化しなくても Eclipse や JBoss のように機能追加を行っていく機構を開発することは可能であると考えられますが、本体までをもプラグイン化するメリットは何と言っても「
ユーザが本体の機能で不要なものを自由にはずすことができる」点にあると考えられます。
これらの設計を鑑みて、フレームワークをプラグイン化する際にフレームワークの主要な機能をすべてプラグイン構造にして提供すると言うのがスマートな設計のように思えます。