
238
7
章 モジュールの接続
}
コードの最後の部分を見ると、プラグインが機能拡張の過程の中で受動的にしか振る舞っていない
のがわかります。制御はアプリケーションが握っており、プラグインを受け付けるフレームワークを実
装しています。
上の例を検討すれば、
2
つの方針の間の重要な違いがわかります。
●
「プラグイン側で制御する拡張機能」のほうが強力かつ柔軟です。というのも、アプリケーション
の内部情報にアクセスでき、まるでプラグインがアプリケーション自体の一部であるかのように
自由に動けることが多いからなのです。しかし、これは時として利点というより負担となること
があります。実際、アプリケーションに少しでも変更があるとプラグインへの悪影響を直接受け
やすく、親アプリケーションの進化に合わせて常に更新が要求されるのです
●
アプリケーション側で制御する拡張機能では、アプリケーション側に「プラグイン用インフラ」が
必要です。プラグイン側で制御する拡
張機能の場合に必要なのは、アプリケーションのコンポー
ネントが何らかの方法で拡張可能であることだけです
●
プラグイン側で制御する拡張機能では、アプリケーションの内部サービスをプラグインと共有す
ることが必須になります(先ほどの例では、共有するサービスはインスタンス
app
です)。共有し
なければ拡張できません。アプリケーション側で制御する拡張機能でもアプリケーションのサー
ビスに一部アクセスする必要が生じる場合がありますが、拡張するためではなく使用するためで
す。
2
つほど例 ...