何らかのアプリケーションがあり、ユーザーがプラグインを作成できるようにしたい場合、アプリケーションをどのように設計する必要がありますか?
何を考慮に入れる必要がありますか、これにはどのようなデザインパターンがありますか?
何らかのアプリケーションがあり、ユーザーがプラグインを作成できるようにしたい場合、アプリケーションをどのように設計する必要がありますか?
何を考慮に入れる必要がありますか、これにはどのようなデザインパターンがありますか?
回答:
プラットフォームによって多少異なりますが、留意すべき一般的な事項がいくつかあります
バージョン管理 アプリケーションを更新すると、古いプラグインはすべて廃止されます(firefoxの問題)
分離 プラグインは何でもできますか?常に信頼していますか?または、何らかのサンドボックスでそれらを実行し、許可を要求する必要がありますか。
更新 プラグインの更新はどのように処理しますか?
セキュリティ プラグインの作成者をどのようにして保証し、なりすましやユーザーが悪意のあるコードをインストールするようにだまされるのを防ぎますか。通常、何らかのコード署名によって解決されます
直列化は、 あなたには、いくつかの種類のアイソレーションを使用するときに多くのあなたは、別のスレッドやプロセス間で情報をシリアル化する必要があります。それを最も効率的に行う方法は?
拡張性 どのような側面を拡張する必要がありますか?APIが扱いにくくなることなく、プラグインの可能性をどのように最大化しますか。
プラグインのサードパーティ開発者をターゲットにしている場合、最も重要なことは(私の経験から)プラグインAPIとクラスをアプリケーションの他の部分とは完全に異なるものとみなし、簡単に開発できるようにすることですできるだけ。メインアプリからプラグインに「ブリードオーバー」するのは非常に簡単なので、プラグインの作成者は必要以上に学ぶ必要があります。プラグインの作成者としてどのようなインターフェイスとエクスペリエンスが必要かを考えて、簡単に作成してください。
別の良い考え方は、「プラグインはこれらすべてのことを(コードで)行うのではなく、「プラグインはこの情報を提供する必要がある」」と考えることではありません。プラグイン。
また、一般的に、コードではなく記述的なアプローチ(xmlなどのメタデータ)を使用できる場合は常に、メタデータの転送、バージョン管理、デプロイ、セキュリティ保護が容易であり、サードパーティがより簡単に構成できるため、大きな利点があります
これを書いた .NETでの拡張性のためにMEFを使用するコードプロジェクトの記事。それは良い紹介です。
SharpDevelopのアドインアーキテクチャ、Mono.Addinsなど、.NET用の他の拡張性フレームワークがあります。、System.AddIn。
Javaには、 Eclipse Plug-in Architectureがあります。
一般的なパターンは次のとおりです。
実際には、依存性注入および戦略パターンと多くのことを共有しています。
プラグインのインターフェースを提供するだけです。
少なくともActivate-Methode(エントリポイント)が含まれている必要がありますが、Initializeなども必要になります。
また、たとえばメニュー項目を登録するなど、レジストリのような方法でホストアプリケーションと通信する可能性があるはずです。そのため、プラグインに対して変更可能/拡張可能なもののレジストリを提供する必要があります。
また、プラグインがそのルーチンを呼び出すことができるように、ホストアプリケーションのデータとオブジェクト用のアクセス可能なストレージが必要です。これは、UnityなどのDIコンテナーを使用してプラグインにアクセスさせることで簡単に実行できるため、必要なサービスを解決できます。
Event-Aggregatorもおそらく良いアイデアです。したがって、プラグインはイベントをスローし、他のプラグインやホストアプリケーションからのイベントに切り離された方法で反応することができます。あなたは間違いなく欲しいです!