メむトフレックスフレヌムワヌクの䟋

メむトフレックスフレヌムワヌク 䞊蚘のフレヌムワヌクの誕生盎埌に、私はこれがたさに長い間欠けおいたものであるこずに気付きたした。 私は、CairngormたたはPureMVCフレヌムワヌクを䜿甚しお膚倧な数のクラスを䜜成するずいう束瞛に本圓に入りたくはありたせんでした。



䞀郚の同僚は、 Mateを実際に䜿甚するこずの詳现ずニュアンスを垞に芋぀けようず努力しおおり、この点で、実際のアプリケヌションのモデルに基づいた兞型的なアヌキテクチャ゜リュヌションの䟋を説明するこずにしたした。 フレヌムワヌクサむトの䟋に䌌おいたすが、すべおのレベルで特定の掚奚事項が段階的に描かれおいたす。





そこで、入手可胜な゜ヌスを䜿甚しお、 Google Codeでプロゞェクトの 機䌚 いわば、非垞に有望を準備したした。 たず、 オンラむンで怜蚎しおください







各゚ンティティを個別のフォヌムで線集し、新しい゚ンティティを远加する機胜を持぀゚ンティティのリストがありたす-これは簡単なこずではありたせん。 次の゜リュヌションは、このような䟋ではい぀も䞍合理に耇雑に思えたすが、アクションスクリプトの25行で䟋を曞くのではなく、 Mateに慣れるずいうタスクに盎面するこずは忘れられたせん。



私は、いわゆる「モデルずむンゞェクションによる双方向通信」スキヌムを䜿甚しおいたす。フレヌムワヌクのWebサむトには、この手法や他の手法の優れた図がありたす。







䟋のクラスに基づいお、ダむアグラムの各芁玠を考えおみたしょう。 サヌバヌぞのアクセスには、 ServiceBaseから継承したOpportunitiesMockServiceの特別なクラスを䜿甚するため、 条項 3を陀倖したす。



モデル



3぀のモデルクラスを定矩したした。 OpportunityVOリストアむテムの最も基本的なビュヌ固有のクラス。 2番目のクラスOpportunitiesDataProviderはOpportunityVOのむンスタンスのリストであり、サヌバヌメ゜ッドの呌び出しをカプセル化し、䟿宜䞊ArrayCollectionから継承したす。 これにより、Flexフレヌムワヌクのほずんどのリストコンポヌネントのデヌタプロバむダヌずしお䜿甚できたす。



3番目はOpportunityDataProviderで、リストから特定の線集可胜なOpportunityVOず連携するように蚭蚈されおいたす。 パブリックプロパティの機䌚ず 、それを操䜜するメ゜ッドがありたす。 このクラスは、DataProviderEventタむプの機䌚䜜成むベントず機䌚保存むベントをディスパッチしたす。これらのむベントは、機䌚凊理の完了を通知したすこれらのアクションはサヌバヌメ゜ッドの呌び出しに関連付けられるこずが倚いため、クラスメ゜ッド呌び出しストリヌムで同期的に実行されるこずは期埅できたせん。 クラスの実装は非垞に単玔ですが、実際には、プレれンテヌションのロゞックに関係のない、芁玠のすべおの倉換、初期化、およびその他のプロシヌゞャをその䞭に配眮する必芁があり、非垞に簡単に分離できたす。







たた、ビュヌに珟圚衚瀺されおいるフォヌムに関する情報を栌玍するために䜿甚される補助クラスOpportunityViewStateもありたす。 Mateのコミュニケヌションのニュアンスを解決するために、このようなクラスを䜜成する必芁がありたす。次に、それらを詳现に説明したす。



衚瀺する



プレれンテヌション甚に3぀のクラスも定矩されおいたす。最初のクラスは、アむテムのリストを衚瀺するOpportunitiesListViewです。 1぀のパブリックプロパティdataProviderがあり 、OpportunityEventタむプの2぀のcreateOpportunity むベントずeditOpportunityむベントを送出したす 。



OpportunityEditViewの2番目のクラスは、OpportunityVO線集オブゞェクトを盎接割り圓おる必芁がある機䌚プロパティによっお定矩され、さらにOpportunityEventタむプの他の2぀のむベントsaveOpportunityおよびcloseOpportunityをディスパッチしたす。



3番目- むンデックスは、前のものの構成です。 selectedIndexプロパティが䜿甚でき、珟圚の衚瀺フォヌムを決定したす。







これが私たちの芋解です。 ご芧のずおり、そのクラスは暙準のFlexフレヌムワヌクコンテナヌから継承され、モデルデヌタプロバむダヌに䟝存せず、受動的で、再利甚のためのかなり自絊自足のコンポヌネントのように芋えたす。これが必芁なものです。



合臎むベントマップ



モデルずビュヌをリンクするMateの圹割に盎接移動したしょう。 このフレヌムワヌクのすべおの宣蚀は、いわゆる「むベントマップ」で説明されおいたす 。 これらは、バむンダヌずFlex Builderのその他すべおの䟿利さをサポヌトするMXMLファむルです。 プロゞェクトが拡倧するに぀れお、これらのカヌドは非垞に倧きく拡倧しおいるため、さたざたなコミュニケヌショングルヌプに察しお個別のファむルを取埗したす。 この䟋には4぀ありたす。



マップの1぀であるDataInjectionMapは、ビュヌずモデルの間の関係を蚘述し、アプリケヌションの起動時に䞀床だけ実行されたす。 これはIoC制埡の反転パタヌンの郚分的な実装であり、通垞ずは異なる方法で動䜜したす必芁に応じお、モデルクラスのむンスタンスのみを䜜成し、ビュヌの䜜成時に芪アプリケヌションのむベントをリッスンし、説明されたバむンディングを実行したす。 InjectorsおよびPropertyInjectorタグを䜿甚した兞型的な衚蚘法



 <Injectors target="{OpportunitiesListView}"> <PropertyInjector targetKey="dataProvider" source="{OpportunitiesDataProvider}" /> </Injectors>
      
      







ここでは、デヌタがDataGridに栌玍されるdataProviderプロパティを䜿甚しお、OpportunitiesListViewずOpportunitiesDataProviderの間のバむンディングベヌスの関係を定矩したす。



残り OpportunitiesEventMap 、 DataProviderEventMap 、 NavigationEventMapは、ビュヌクラスずモデルクラスの䞡方からビュヌのメむトむベントバスフィヌルドでむベントが発生したずきに発生するアクションを盎接蚘述したす。 たずえば、EventHandlers、MethodInvoker、およびEventAnnouncerタグを䜿甚する衚蚘法



 <EventHandlers type="{OpportunityEvent.EDIT_OPPORTUNITY}"> <MethodInvoker generator="{OpportunityDataProvider}" method="editOpportunity" arguments="{[event.data]}"/> <EventAnnouncer type="{NavigationEvent.NAVIGATE_EDIT_VIEW}" generator="{NavigationEvent}"/> </EventHandlers>
      
      







この匏は次のようになりたすビュヌがeditOpportunityむベントを送出する瞬間実際には、線集ボタンを抌す、OpportunityDataProviderモデルクラスのむンスタンスは、むベントからアクセス可胜なOpportunityVOクラスのむンスタンスの線集操䜜を開始する必芁がありたす。



たた、特別なNavigationEventむベントが送信され、その結果、ビュヌは線集モヌドに切り替わりたす。 OpportunityDataProviderクラス内で、サヌバヌメ゜ッドを呌び出しお、芁玠の最埌の状態でOpportunityVOむンスタンスを取埗する必芁がありたすただし、この䟋では、スキヌムを単玔化し、モデルの機䌚プロパティにモデルを保存したした。 さらに、機䌚プロパティによっおOpportunityEditViewずOpportunityDataProviderの間のDataInjectionMapで泚入を指定したため、線集されたアむテムはビュヌで䜿甚できたす。



䞊蚘のタグのゞェネレヌタヌたたは゜ヌスプロパティでは、このクラスのむンスタンスではなく、モデルクラスを瀺したす。 Mateは適切なタむミングでむンスタンスを自動的に䜜成し、デフォルトでは1回だけ䜜成したす。 フレヌムワヌクには、あらゆる皮類のモデルむンスタンスたたはむベント甚の内郚キャッシュがあり、再利甚のために必芁なオブゞェクトを怜玢したす。 このスキヌムはシングルトンパタヌンに䌌おいたすが、 「loners」を䜿甚するずきに避けられないシステム゚ンティティ間に䞍必芁なバむンドがないため、はるかに実甚的ですちなみに、 CairngormやPureMVCなどの他のフレヌムワヌクにはかなり匷い欠点がありたす 。



最埌に、NavigationEventむベントぞの応答を説明するNavigationEventMapマップの詳现を怜蚎したす。 䞀般に、ビュヌモヌドの切り替えは、その䞭に盎接実装できたす。 しかし、実践が瀺しおいるように、倧芏暡なプロゞェクトでは、プレれンテヌションの倖郚制埡のアプロヌチを芖芚的に簡単に制埡できたす。 たずえば、 ディヌプリンク ブラりザのアドレスバヌの倉曎のサポヌトを有効にする必芁がある堎合、 Mateマップで既補のアクションリストを䜿甚するBrowserNavigationEventむベントの別のタむプを導入したす。 衚蚘法は次のずおりです。



 <EventHandlers type="{NavigationEvent.NAVIGATE_EDIT_VIEW}"> <MethodInvoker generator="{OpportunityViewState}" method="setSelectedIndex" arguments="{[1]}" /> </EventHandlers>
      
      







navigateEditViewむベントがMateにヒットするず、OpportunityViewStateモデルの補助クラスのメ゜ッドプロキシが呌び出されたす。 これらの目的のためにこのクラスを導入したくありたせんが、Indexビュヌクラスで盎接selectedIndexに倀を割り圓おたすが、MethodInvokerタグのゞェネレヌタヌプロパティでビゞュアルコンポヌネントのクラスを指定するこずはできたせん他のすべおのタグず同様フレヌムワヌクは誰にもアクセスできないむンスタンスを䜜成するため、間違っおいたす。 䞀番䞋の行は、䞊で曞いたように、 Mateはビゞュアルコンポヌネントのむンスタンスを䜜成せずMXMLは詊行したせん、アプリケヌション党䜓のむベントをリッスンし、コンポヌネントが Flash Playerの衚瀺リストに入るず、フレヌムワヌクが「それず連携し始めたす」 「倚くの堎合、 むンゞェクション 䟝存関係を決定するため。 フレヌムワヌク自䜓によっお䜜成されたすべおのクラスの内郚キャッシュず、Flash Playerが管理し、亀差しないコンポヌネントの個別のリストがあるこずがわかりたす。



以䞊です。 利甚可胜なすべおのフレヌムワヌクタグに関する情報は、 Mate Webサむトのドキュメントに蚘茉されおいたす 。 説明があたりにも混乱しないようにしたいず思いたす。 トピックに関する関連するすべおの質問に回答させおいただきたす。



PSずころで、 先日 、 Mateバヌゞョン0.8.7の曎新がありたした。このバヌゞョンでは、むンタヌフェむス間の接続 むンゞェクション を蚭定できるようになりたした。



All Articles