C++を使ってIMアプリケーションのプラグインシステムを設計しようとしています。 IMアプリケーションはC++でも実装されています。プラグインシステムはjavascriptプラグインをサポートしている必要があります。javascriptプラグインをサポートできるC++プラグインフレームワークを設計するには
これらのプラグインはIMアプリケーションとやりとりすることができます。たとえば、サードパーティの開発者は、github上のプロジェクトに変更があるたびにwenbhookメッセージをIMアプリケーションに送信できるgithub-robot-pluginを実装できますスラックを除いてSlackのようなものはC++アプリケーションではありません)。
とても簡単で完全なプラグインフレームワークが実装された記事Building Your Own Plugin Frameworkを読んだことがあります。それは、プラグインの登録、作成、破棄を管理するプラグインマネージャーを設計しました。私がこの記事から学んだ最も重要なことは、各プラグインは本質的にインターフェースだということです。
私は、JavaScriptをC++とやり取りできるようにするブリッジクラスを実装しました。 javascriptプログラムは、コマンドといくつかのパラメータを提供し、C++を呼び出して、ブリッジクラスによって提供されるメソッドを通じていくつかのロジックアクションを実行できます。たとえば、javascriptプラグインでは、サードパーティの開発者はhtmlリソースを提供する必要があります。 htmlの "githubアカウント情報を保存する"ボタンがクリックされた場合、javascriptは "save_account_info"というコマンドをブリッジに送信し、C++はgithubアカウント情報をローカルデータベースに保存します。任意の提案は非常に高く評価され
class IPlugin {
public:
virtual std::string bridge_call(std::string cmd, Json params) = 0;
};
class SomePlugin : public IPlugin {
public:
virtual std::string bridge_call(std::string cmd, Json params) {
if (cmd == "some_command_1") {
// do logic1
} else if (cmd == "some_command_2") {
// do logic2
}
}
};
:
は、私は彼らがプラグインを作成したい場合は第三開発者が実装しなければならないことを、次のようなインタフェースを提供するのは良いアイデアであるかどうかを非常によく分かりません。