Flexモジュール化開発優勢と技巧解析

62762 ワード

http://developer.51cto.com/art/201008/215646.htm
 
 
 
Flexモジュール化開発の概念を理解していますか?モジュールはSWFファイルをロードしてアンインストールすることができます.モジュールはプログラムと独立して動作しませんが、任意の数のプログラム間で共有できます.
AD:
 
本論文では、Flexモジュール化開発の概念について重点的に議論し、モジュールはプログラムをいくつかのセグメントまたはユニットに分割することができます.メインプログラムまたはシェルは、他の必要なモジュールを動的にロードし、起動時にすべてのモジュールをロードしないし、ユーザーがまだインタラクションしていないモジュールをロードしない.
Flexモジュール化開発
モジュールは一つのプログラムによってロードされ、アンロードされるSWFファイルです.モジュールはプログラムと独立して動作しませんが、任意の数のプログラム間で共有できます.
モジュールは、プログラムをいくつかのセグメントまたはユニットに分割することができます.メインプログラムまたはシェルは、他の必要なモジュールを動的にロードし、起動時にすべてのモジュールをロードしないし、ユーザーがまだインタラクションしていないモジュールをロードしない.プログラムがモジュールを必要としない場合、モジュールをアンマウントしてメモリとリソースを解放します.
Flexモジュール化プログラムには次のような利点があります.
1.より小さい初期段階のSWFファイルのダウンロード量.2.より短いロード時間3.より良いパッケージの関連性
モジュールのメリット
モジュールはIlexModuleFactory類工場のダイナミックロードが可能な特殊タイプのSWFです.これは、プログラムが実行時にコードを読み込み、クラスのインスタンスを作成することを許可します.カテゴリ実装がメインプログラムにリンクされる必要はありません.
モジュールと実行時共有ライブラリ(RSLs)の共通点は、プログラムから独立してロードされたSWFファイルにコードを分割することです.ただし、モジュールはRLSよりも柔軟であり、動作中に動的にロードし、アンインストールし、プログラム外でコンパイルされることができるからである.
二つのよくある使用モジュールのシーンは、異なるユーザ経路を持つプログラムと一つのポータルプログラムである.
モジュールAPIの詳細
モジュールは一つの標準インターフェースを通して一つの種類の工場を実現しました.クラス工場の製品は「シェル」によって感知されるインターフェースまたは「シェル」によって感知できるモジュールのインターフェースを実現しています.
これらの共有インターフェースは、共通インターフェースを用いて定義することにより、「シェル」とモジュール間のハード依存性を低減することができる.これは,タイプの安全な通信と,SWFファイル長を増加させない強制的な抽象層を提供する.
下の図は、モジュールURIを索引とする一例のMapに加工した「シェル」とモジュールのインターフェースの関係を示しています.モジュールをロードすると、一連のイベントがクライアントにモジュールの状態を監視することができます.モジュールは常に一回しかロードしないが、その後の再ローディングはまだイベントをリードしているので、クライアントコードは簡略化されてもよく、READY時間によってモジュールのクラス工場がユーザーに利用できるかどうかを安心して感知することができる.
ModuleLoader類はModuleManager APIの上部にある「薄層」である.ModuleLoaderクラスはモジュールアーキテクチャに基づく最も簡単なクラスを実現するために使用されますが、ModuleManagerはモジュールのより全面的な制御を提供します.
モジュールのドメイン
デフォルトでは、一つのモジュールが現在のプログラム領域のサブドメインにロードされます.ModuleLoaderクラスのappration Domainを通じて異なるプログラムドメインを定義できます.
モジュールがサブドメインに挟まれているため、自分の涙はメインプログラムのドメインに定義されません.例えば、最初のモジュールは、PopUpManager類をロードすることにより、プログラム全体でPopUpManager類の所有者となります.このモジュールは、SingletonManagerを使用してマネージャを登録しています.他のモジュールがその後PopUpManagerを使ってみたら、AdobePlayerが例外を投げます.
解決策は、例えばPopUpManagerやDragManagerなどのマネージャ一級の他の共有されているサービスがメインプログラムで定義されていることを確保することです.これらのクラスの中の一つを「殻」に上げると、このクラスはすべてのモジュールに使われます.典型的には、以下のスクリプトブロックを追加することにより実現される.

   
  1. importmx.managers.PopUpManager;  
  2. importmx.managers.DragManager;  
  3. privatevarpopUpManager:PopUpManager;  
  4. privatevardragManager:DragManager; 
この技法は同じシェルをコンポーネントに適用した.モジュールは、まず自身に属し、自身のドメインに定義されたコンポーネントを使用する.その結果、他のモジュールが他のモジュールによって使用されているコンポーネントを使用しようと試みる場合、その定義は既に存在している定義に一致しない.コンポーネント定義が間違っているマッチングを避けるには、メインプログラムでコンポーネントを作成する実力が必要です.このように、そのコンポーネントの定義はメインプログラムによって適用され、他の任意のワードドメインのコンポーネントによって使用されることができる.
Flexモジュールは、ロードされたプログラムと同じセキュリティドメインにあるので、AIRプログラムでモジュールを使用する場合、どのモジュールSWFファイルもメインプログラムSWFファイルと同じディレクトリまたはメインプログラムSWFファイルがあるディレクトリのサブディレクトリに配置して、メインプログラムSWFとモジュールSWFがAIRプログラムのセキュリティサンドボックスにあることを確認してください.この点はモジュールのパスによって「./」の記号が不要になり、プログラムディレクトリまたはプログラムのサブディレクトリから外へナビゲーションして検証することができます.
Flexモジュール化プログラム
Flexモジュール化プログラムを作成するには、モジュールごとに独立したクラスを作成し、これらのモジュールをロードするプログラムが必要です.
Flexモジュール化プログラムを作成します.
1.任意の数のモジュールを作成します.MXMLベースのモジュールファイルのルートマークは<mx:Module>です.アクションScriptに基づくモジュールは、ModuleまたはModuleBaseクラスから継承されます.2.各モジュールをコンパイルします.mxmlcコマンドラインコンパイラまたはAdobeFlexBulder内に建設されたコンパイラを使ってコンパイルできます.3.Applicationクラスを作成するのは、典型的なルート要素が<mx:Applicaton>のMXMLファイルであってもいいし、Actriptだけのプログラムであってもいいです.4.Appleファイルでは、<mx:ModuleLoader>ラベルを使って各モジュールをロードします.mx.modules.ModuleLoaderとmx.modules.ModuleManager類の方法でモジュールをロードすることもできます.
モジュールを作成
モジュールはプログラムファイルのような涙です.これらはアクションScriptで作成できます.また、MXMLタグを使ってFlexクラスを拡張する方法で作成できます.すなわち、MXMLやアクションScriptでモジュールを作成できます.
MXMLベースのモジュールを作成します.
MXML種のモジュールを作成するには、というルートのMXMLファイルを作成することでmx.modules.Moduleクラスを作成する必要があります.そのラベルには、任意の名前空間を追加することができます.ファイルのヘッダにXMLタイプの生命ラベルを含める必要があります.以下の通りです. 

   
  1. <?xmlversionxmlversion="1.0"> 
  2. <mx:Modulexmlns:mxmx:Modulexmlns:mx="http://www.adobe.com/2006/mxml"width="100%"height="100%"> 
  3. <mx:Script> 
  4. <![CDATA[  
  5. importmx.collections.ArrayCollection;  
  6. [Bindable]  
  7. publicvarexpenses:ArrayCollection=newArrayCollection([  
  8. {Month:"Jan",Profit:2000,Expenses:1500},  
  9. {Month:"Feb",Profit:1000,Expenses:200},  
  10. {Month:"Mar",Profit:1500,Expenses:500}  
  11. ]);  
  12. ]]> 
  13. </mx:Script> 
  14. <mx:ColumnChartidmx:ColumnChartid="myChart"dataProvider="{expenses}"> 
  15. <mx:horizontalAxis> 
  16. <mx:CategoryAxis 
  17. dataProvider="{expenses}" 
  18. categoryField="Month" 
  19. /> 
  20. </mx:horizontalAxis> 
  21. <mx:series> 
  22. <mx:ColumnSeries 
  23. xField="Month" 
  24. yField="Profit" 
  25. displayName="Profit" 
  26. /> 
  27. <mx:ColumnSeries 
  28. xField="Month" 
  29. yField="Expenses" 
  30. displayName="Expenses" 
  31. /> 
  32. </mx:series> 
  33. </mx:ColumnChart> 
  34. <mx:LegenddataProvidermx:LegenddataProvider="{myChart}"/> 
  35. </mx:Module> 
モジュールをコンパイルした後、プログラムまたは他のモジュールにロードすることができます.MXMLベースのモジュールを下記のテクニックでロードできます.
ModuleLoader ModuleLoaderクラスは、高層の処理モジュールのAPIを提供しています.ModuleManager ModuleManager類は、ModuleLoaderより下の処理モジュールのAPIを提供します.
アクションScriptに基づくモジュールを作成します.
アクションScriptでモジュールを作成するには、mx.modules.Modduleクラスまたはmx.moduls.ModuleBaseクラスから引き継ぐファイルを作成することができます.拡張されたModuleクラスはMXMLファイルにマークを使用する効果と同じです.あなたのモジュールがフレームと対話するなら、このクラスを拡張するべきです.これは、表示リストにオブジェクトを追加するか、または表示オブジェクトと対話することを意味する.
拡張されたModuleクラスのアクションScriptクラスの例を確認するには、まず「mx:Module」という要素のMXMLファイルを作成します.このファイルをコンパイルすると、keep-generate-actionscriptコンパイルオプションをtrueに設定します.Flexのコンパイラは、ゲナートというディレクトリに生成されたクラスを保存します.生成されたクラスにはまだ知られていないコードが含まれていることに注意します.結果として、拡張されたModuleクラスのアクションScriptベースのモジュールは作成できないかもしれません.代わりにMXMLファイルを使用する方法です.
モジュールにフレームコードが含まれていない場合は、ModuleBaseから受け継いだ涙を作成することができます.ModuleBseクラスを使用すると、モジュールはModuleクラスに基づく場合よりも小さいです.これは依存フレームコードを含んでいません.
以下の例は、単純でフレームコードを含まない、ModuleBaseクラスから引き継ぐモジュールを作成しました.

   
  1. package{  
  2. importmx.modules.ModuleBase;  
  3. publicclassSimpleModuleextendsModuleBase{  
  4. publicfunctionSimpleModule(){  
  5. trace("SimpleModulecreated");  
  6. }  
  7. publicfunctioncomputeAnswer(a:Number,b:Number):Number{  
  8. returna+b;  
  9. }  
  10. }  
  11. }  
  12.