Adobe Flex 3 ヘルプ

モジュール化アプリケーションの概要

モジュールについて

モジュールとは、アプリケーションによってロードまたはアンロードされる SWF ファイルのことです。モジュールをアプリケーションから独立して実行されることはできませんが、任意の数のアプリケーションがモジュールを共有することはできます。

モジュールを使用すると、アプリケーションを複数の部分、つまりモジュールに分割できます。シェルと呼ばれるメインアプリケーションでは、必要に応じて他のモジュールを動的にロードすることができます。シェルの起動時にすべてのモジュールをロードする必要はありません。また、ユーザーが利用しないモジュールについては、ロードの必要はありません。アプリケーションでモジュールが必要なくなったら、モジュールをアンロードしてメモリとリソースを解放することができます。

モジュール化アプリケーションには次の利点があります。

  • SWF ファイルの初期ダウンロードサイズが小さくなります。
  • SWF ファイルサイズが小さいほど、ロード時間が短くなります。
  • アプリケーションの関連側面のカプセル化が向上します。例えば、「レポート」機能を、個別に作業できるようにモジュールに分割することができます。

モジュールのメリット

モジュールは、IFlexModuleFactory クラスのファクトリを含む、動的ロードが可能な特殊タイプの SWF です。したがって、アプリケーションはコードを実行時にロードしてクラスインスタンスを作成でき、クラスの実装をメインアプリケーションにリンクする必要はありません。

タイム共有ライブラリ(RSL)と似ている点として、モジュールでは、コードがアプリケーションから分離されて、個別にロードされる SWF ファイルに含まれています。モジュールは実行時にロードまたはアンロードでき、アプリケーションがなくてもコンパイルできるので、RSL よりも柔軟性が高くなっています。

モジュールを使用するメリットがある 2 つの一般的なシナリオは、異なるユーザーパスを持つ大規模アプリケーションと、ポータルアプリケーションです。

1 番目のよくあるシナリオの例としては、生命保険、自動車保険、健康保険、歯科保険、旅行保険、ペット獣医保険のための数千の画面を持つ、大規模な保険用アプリケーションが挙げられます。

RIA(リッチインターネットアプリケーション)設計の従来のアプローチでは、MXML クラスの階層ツリーを持つ、完全に統合されたアプリケーションを構築しました。アプリケーションのメモリ使用と起動時間は著しく大きくなり、新しい機能セットを追加するたびに SWF ファイルサイズが増大します。

ただし、このアプリケーションを使用する場合、ユーザーは 1 つの画面サブセットにのみアクセスします。画面をリファクタリングして、要求時にロードされるモジュールの小さなグループに分割することにより、メインアプリケーションの体感上のパフォーマンスを向上させ、メモリ使用を抑えることができます。また、アプリケーションをモジュールに分割した場合、設計のカプセル化が向上するため、開発者の生産性を高めることができます。アプリケーションを再構築するとき、開発者はアプリケーション全体を再コンパイルするのではなく、単一のモジュールのみ再コンパイルするだけですみます。

2 番目の一般的なシナリオの例は、多数のポートレット用のサービスを提供する、ActionScript 3.0 で記述されたメインポータルアプリケーションを使用したシステムです。ポートレットは、ユーザーごとにダウンロードされるデータに基づいて設定されます。従来のアプローチでは、既知のすべてのポートレットをコンパイルする 1 つのアプリケーションを構築しました。この方法は、デプロイと開発の両面で効率的ではありません。

モジュールを使用することにより、ポータルサービスを含むインターフェイスと、汎用ポートレットインターフェイスを設定できます。XML データを使用して、特定のセッションでどのモジュールをロードする必要があるかを判別できます。モジュールがロードされると、そのモジュール内のクラスファクトリへのハンドラを取得し、そのハンドルを使用してポートレットインターフェイスを実装するクラスのインスタンスを作成します。このシナリオでは、完全な再コンパイルは、インターフェイスが変更された場合にのみ必要です。

モジュール API の詳細

モジュールは、標準のインターフェイスを使用してクラスファクトリを実装します。クラスファクトリの生成物がシェルにとって既知のインターフェイスを実装するか、シェルがモジュールにとって既知のインターフェイスを実装します。

それらの共有インターフェイスは共有インターフェイス定義を使用するので、シェルとモジュールの間の強い依存関係を弱めることができます。これにより、タイプセーフな通信が提供され、SWF ファイルサイズを大幅に増大させることなく抽象レイヤーを適用することができます。

次の図は、シェルとモジュールインターフェイスの関係を示しています。

ÉVÉFÉãÇýÉÇÉWÉÖÅ[ÉãÇÃÉCÉìÉ^Å[ÉtÉFÉCÉXÇýÇÃä÷åW

ModuleManager は、モジュールの URL によってインデックス付けされたシングルトンのマップとして扱われる、ロードされるモジュールのセットを管理します。モジュールをロードすると、モジュールの状態をクライアントで監視できる一連のイベントがトリガされます。モジュールは一度しかロードされていなくても、後続のリロードでもイベントが送出されるので、クライアントコードを簡略化して、モジュールのクラスのファクトリが利用できることを確認するために READY イベントを使用できます。

ModuleLoader クラスは、1 つのビジュアル UIComponent を定義しただけのモジュールに対して mx.controls.SWFLoader クラスと同様に機能する ModuleManager API の最上位の簡易レイヤーです。ModuleLoader クラスは、モジュールベースのアーキテクチャを実装する際に使用する最も単純なクラスですが、モジュールを広範に制御できます。

モジュールのドメイン

デフォルトでは、モジュールは、現在のアプリケーションドメインの子ドメインにロードされます。異なるアプリケーションドメインを指定するには、ModuleLoader クラスの applicationDomain プロパティを使用します。

モジュールは子ドメインにロードされるので、所有するクラス定義はメインアプリケーションのドメインにはありません。例えば、PopUpManager クラスをロードする最初のモジュールは、SingletonManager にマネージャを登録するので、アプリケーション全体に対する PopUpManager クラスの所有者になります。その後で別のモジュールが PopUpManager を使用しようとすると、Adobe ® Flash® Player により例外がスローされます。

これを解決するには、PopUpManager や DragManager などのマネージャと他のすべての共有サービスを必ずメインアプリケーションで定義します(または、後でシェルのアプリケーションドメインにロードします)。それらのクラスのいずれかをシェルに格上げすると、そのクラスをすべてのモジュールで使用できるようになります。通常、これは次のコードをスクリプトブロックを追加することで行えます。

import mx.managers.PopUpManager;
import mx.managers.DragManager;
private var popUpManager:PopUpManager;
private var dragManager:DragManager;

この手法はコンポーネントにも適用できます。コンポーネントを最初に使用するモジュールは、そのコンポーネントのクラス定義をそのモジュールのドメイン内で所有します。その結果、既に別のモジュールで使用されているコンポーネントをそれとは別のモジュールが使用しようとしても、そのコンポーネントの定義は既存の定義と一致しません。コンポーネント定義の不一致を回避するには、コンポーネントのインスタンスをメインアプリケーション内に作成します。その結果、コンポーネントの定義がメインアプリケーションで所有され、すべての子ドメイン内のモジュールで使用できるようになります。

Flex モジュールはこのモジュールをロードするアプリケーション (SWF) と同じセキュリティドメインに置く必要があるので、AIR アプリケーション内でモジュールを使用している場合、モジュールの SWF はすべて、メインアプリケーションの SWF かそのサブディレクトリのいずれかと同じディレクトリ内に置かなくてはなりません。こうすることによって、モジュールの SWF は、メインアプリケーションの SWF と同様に AIR アプリケーションセキュリティサンドボックス内にあることが保証されます。これを検証する 1 つの方法は、該当するモジュールのロケーションの相対 URL に、アプリケーションディレクトリまたはそのサブディレクトリのいずれかの外部に移動することを表す「../」(1 つ上のレベル)を使用する必要がないことを確認することです。

アプリケーションドメインの詳細については、『ActionScript 3.0 のプログラミング』のApplicationDomain クラスの使用

モジュールアプリケーション

モジュール化アプリケーションを作成するには、モジュールごとの別個のクラスと、モジュールをロードするアプリケーションを作成します。Adobe® Flex™ Builder™ では、モジュールの使用を容易にするいくつかのメカニズムが提供されています。

モジュール化アプリケーションの作成

  1. 任意の数のモジュールを作成します。MXML ベースのモジュールファイルのルートタグは <mx:Module> です。ActionScript ベースのモジュールは、Module クラスまたは ModuleBase クラスのいずれかを拡張したものです。
  2. アプリケーションの場合と同じように、各モジュールをコンパイルします。そのためには、mxmlc コマンドラインコンパイラ、または Adobe Flex Builder に組み込まれたコンパイラを使用します。
  3. Application クラスを作成します。通常、これは MXML ファイルで、そのルートタグは <mx:Application> ですが、ActionScript 専用アプリケーションの場合もあります。
  4. Application ファイルでは、<mx:ModuleLoader> タグを使用して、各モジュールをロードします。mx.modules.ModuleLoader クラスおよび mx.modules.ModuleManager クラスのメソッドを使用してモジュールをロードすることもできます。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート