今後のプロジェクトのクライアント側の実装技術としてAdobeAIRを選択することを考えています。(以前の選択はC#とWPFでしたが、最近Flash / Flex / AIRに本当に感銘を受けました。)
しかし、私の製品の最も重要な機能の1つはプラグインアーキテクチャであり、サードパーティの開発者が機能とGUIを興味深い方法で拡張できるようにします。
C#でアーキテクチャを設計する方法を知っています。プラグインローダーは、ローカルの「app /plugins/」ディレクトリにあるすべてのアセンブリを列挙します。アセンブリごとに、すべてのクラスを列挙し、「IPluginFactory」インターフェースの実装を探します。工場で作成されたプラグインごとに、MVCクラスを要求し、GUI要素(メニュー項目、パネルなど)を既存のGUIレイアウトの適切なスロットにスナップします。
AIR内で同じことを実行したいと思います(Webからではなくローカルファイルシステムからプラグインをロードします)。この記事を読んだ後、私の理解はそれが可能であり、基本的なアーキテクチャ(サンドボックス化されたApplicationDomainsへのSWFのロードなど)は.NETで行う方法と非常に似ているということです。
しかし、私は落とし穴に興味があります。
Flash Playerを使用して動的なクラスローディングを行ったことがある場合(できれば、Flash / Flexの混合アプリで、特にAIRホスト内で)、プラグインフレームワークを構築した経験と、トリッキーな状況に遭遇した場所についてお聞かせください。フラッシュプレーヤー、およびフラッシュ、フレックス、およびAIRAPIを使用します。
たとえば、誰かが私にこれと同じ質問をしたが、Javaプラットフォームを念頭に置いている場合、JVMには「モジュール」または「アセンブリ」の概念がないことは間違いありません。最高レベルの集約は「クラス」であるため、大規模なプロジェクトを管理するためのプラグインシステム内に組織構造を作成することは難しい場合があります。また、複数のクラスローダーの問題と、それぞれがロードされたクラスの独自の個別のインスタンスを(独自の個別の静的変数を使用して)維持する方法についても説明します。
これが私にとってまだ答えられていないいくつかの特定の質問です:
1)actionscript "Loader"クラスは、SWFをApplicationDomainにロードできます。しかし、そのappdomainには正確に何が含まれていますか?モジュール?クラス?MXMLコンポーネントはどのように表現されますか?プラグインインターフェイスを実装するすべてのクラスを見つけるにはどうすればよいですか?
2)メインアプリケーションとは別のApplicationDomainにプラグインをロードした場合、他のappdomain内からコードを呼び出すのはかなり複雑ですか?アプリ間ドメインマーシャリングレイヤーを通過できるデータの種類について、重要な制限はありますか?マーシャリングは法外に高価ですか?
3)理想的には、自分のメインコードの大部分をプラグインとして開発し(メインアプリケーションはプラグイン読み込みシェルにすぎません)、プラグインアーキテクチャを使用してその機能をアプリに追加したいと思います。それはあなたの心に恐怖をもたらしますか?