プラグイン アーキテクチャ自体はありませんが、クライアント コードを疎結合に保つ方法を説明します。アイデアが得られるかもしれません。
asp.netを使用しています。最初にメディエーターの JavaScript ファイルを含む main.aspx ページを配信します。これは、グローバル オブジェクト (メディエーターと呼びます) を定義します。これは、私たちが定義する唯一のグローバル オブジェクトです。
メディエーターは、パブリッシュ メッセージとサブスクライブ メッセージを含む単純なインターフェイスを公開します。
mediator.subscribe(messageName, callback);
mediator.publish(messageName);
mediator.js ファイルの後に、メイン ページには他の多数の javaScript ファイルが含まれます。各ファイルは、その機能をメディエーターに登録する即時関数で構成されます。このパターンの詳細については、こちらを参照するか、以前の質問を参照してください。
同様のアプローチに従うこともできます - プラグインが機能を登録するためのインターフェースを提供する単一のグローバル オブジェクト (たとえば、pluginFramework) を定義します。クライアントに配信する html ページを作成するときは、最初に pluginFramework ファイルをインクルードしてから、目的の JavaScript プラグイン ファイルを動的にインクルードします。これは、ユーザーまたはデバイスに依存する可能性があります (たとえば、デバイスがタッチ対応の場合は別のプラグインですか?)。これらのプラグイン ファイルは、即時関数を使用して pluginFramework に機能を追加します。
プラグインが UI のメニューに機能を追加できるようにする方法の例を次に示します。
pluginFramework.js:
var pluginFramework = (function() {
var menuItems = [];
function addMenuItemPrivate(itemName, callback) {
// e.g. add itemName and callback to menuItems
}
return {
addMenuItem: addMenuItemPrivate;
}
})());
photoPlugin.js:
(function() {
function addPhoto() {
//...
}
pluginFramework.addMenuItem('add photo', addPhoto)
})());
これが何らかの形で役立つことを願っています!