2011-07-13 8 views
1

私は開いているTitleWindowを持っているので、6つの状態が定義されています。私はすべての私の意見にPresentationモデルのパターンを使用しています。私は不満足なニュアンスを発見しました。私がウィンドウにXXX状態になるように指示すると、フレックスの状態が遅延ロードを使用するため、コントロールを初期化する必要があります。だから...私のPMコードは、myTextArea.textが爆発し、「アクセスできない」と言っています。回避策として、コントロールをPMでコントロールを登録するためにいくつかのcreationCompleteイベントを作成しました。したがって、状態が変わると、textareaは最終的に初期化され、creationCompleteはその参照を設定するPM.registerTextArea()を呼び出します。その関数で私は私のコードを実行します... myTextArea.text ..フレックスCairngorm 3プレゼンテーションモデルの初期化

これは私がそれを嫌うような醜いハックのように思えます。作成された状態全体がPMにコールされるまで待つ方法はありますか?私はenterstateを試みた...しかし、このイベントは、状態コントロールが準備が整う前に発火するようだ。

みんなに...

を私がコメントを追加しようとしましたが、私は編集は私がこれを行うことができる唯一の方法だと思います:偉大なフィードバックに感謝を。私はちょっとしたストレートPMをやっています。すべてのビューにはviewControllerがあります(私が呼び出すとき)。それはちょっとした代理人/データ提供者の自分のハイブリッド。しかし、これは疑問です。これは、痛みである状態を扱う際のフレックスコンポーネントのライフサイクルです。状態を変更した場合、「この状態のすべてのコンポーネントが準備完了です」と言うイベントはありません。 「私たちは州を変えました」と言っています。状態の変化で発生する私のコードは、まだ準備ができていないコンポーネントと対話しようとしています。ですから、私が見るところでは、状態のすべてのコンポーネントでcreationCompleteを使用して登録する準備ができていない限り、すべてのコンポーネントが確実に状態になるように設計パターンや完璧な方法がないようです競争状態になる。フレームワークやデザインパターンにかかわらず、これは根本的な問題であるようです。

テキストエリアは簡単なPM修正です。pm値にバインドするだけです。しかし、私はできない別の時があります。

具体的には、私がその状態になると、ディスプレイにビデオを添付しようとしています。これはaddchildを介して行われます。どこに行っても、私はaddchildを呼び出す前にvideoDisplayがロードされていることを知る必要があります。私は、docsが最後に発生すると言うので、currentStateChangeイベントを試みました...しかし、悲しいかな、状態のコンポーネントはまだ初期化中です。ですから、creationCompleteは私の唯一の選択肢です。たぶん、クリーンなコードを守る唯一の純粋な方法は、状態が入力されると、物事(ビデオ表示とビデオ)全体を作成することです。私はフレックスフレームワークが、その場ですべてのものをbuiildingするのではなく、ここに私をehlpするイベントを持っていることを望んでいました。

+0

ちょっと汚れているので気に入らないかもしれませんが、テキストクラスに表示する値を保持するために、ビュークラス内にパブリックのバインド可能な変数を作成するとどうなりますか?この方法で、コントローラからインターフェイスを介してプレゼンテーションにプッシュしますが、コントロールは実際に内部の「バッファ」を使用してコントロールが作成されてバインドされるまで値を保持します。 – shaunhusain

+0

MVPを使用する動機は何か、私はそれを数回は理解しようとしましたが、実際に実装したことはありませんでした。なぜなら、おそらくテストが簡単で、それは余分な複雑さのためです。ただの好奇心から動機づけは何ですか? – shaunhusain

+0

@shaunhusain:MVP!=プレゼンテーションモデル。 MVCよりもプレゼンテーションモデルが好きです。なぜなら、複雑さが低く、デカップリングが強く、テスト可能な方法でビューを偉大に抽象化するからです。 –

答えて

0

PMにはビジュアルコンポーネント(myTextArea)への参照があるため、完全に純粋なプレゼンテーションモデルではありません。これは、監督者のプレゼンター/コントローラータイプの設定のように見えます。

あなたの問題を解決する方法は完全なプレゼンターを完全に使用することです(ビューの知識は全くありません)。完全なコントローラーを使用してください(ビューはコントローラーが通信するインターフェイスを実装しています)。プレゼンターをFlexで使用する利点は、textやselectedItemなどのバインド可能な値を作成でき、ビューがオンラインになるたびにその変数にバインドされるため、Flexコンポーネントのライフサイクルに関する問題がなくなることです。

+0

私はこれが古い質問だったと知っていますが、あなたはちょっとここにいました。私たちは既存のアプリにPMパターンを追加していましたが、それは正方形のペグ/丸穴になってしまいました。最終的に私はIOC依存性注入を行った(そして、事を書き換えた)。ちょうど少し戻ってほしいと思ってここに再び活発になったと私はあなたに良いものだった答えのための信用を与えていないことを見た。 –

+0

@JasonReevesええ、Flexの悪いアーキテクチャは、長期的にあなたを本当に傷つける可能性があります。最初の契約では、すべてのレイヤーでアプリケーションで70回ずつ参照された13種類のシングルトンを持つコードで作業していました。それにもかかわらず、プロジェクトはあまり進まなかった。 IOCはテストを容易にするのに役立ち、懸念と責任の分離についての検討を強制します。 –