1

モデルビューのコントローラパターンを勉強し始めました。私は今MVCの基本的な使い方を理解していますが、単純なテストでMVCを実装しようとすると、問題が発生しました。 Ofcoarse私は簡単にコードを調整して動作させることができますが、MVCパターンを正しく実装する方法を学びたいと思います。基本的なMVCパターンの通信

テスト: 私は単純なプログラムを作るためにactionscript 3を使用しました。それはタレットとマウスクリックで構成されています。タレットは画面の中央にあります。どこかをクリックすると、タレットがクリックされたポイントに向かって回転します。マウスとタレットの両方に、独自のモデル、ビュー、コントローラがあります。クリックすると、MouseModelが正しく変更されます。しかし実際のTurretViewが応答するには、TurretModelは回転変数を変更してイベントを送信する必要があります。

質問は誰がMouseModelイベントに応答しますか?

私は、これはイベントリスナーであることを、それらを必要とするので、MouseModelが直接、TurretModelまたはTurretControlに影響を与えていないように最善を考え出し。 TurretViewをMouseModelでリスニングさせ、TurretViewがTurretModelイベントを更新できるようになったら、TurretModelを調整するようにTurretControlに指示します.TurretModelイベントは単純なタスクのための余分なコードのようです。また、私は、MouseControlにTurretModelに影響を与えないでください。これは、将来のクラスの入力としてマウスの柔軟性を損なうでしょう。

Ow、どのクラスで角度計算のコードを入れますか?事前

答えて

3

MVCの目標は、主にModelとViewの分離であり、コントローラは、2つの間のコミュニケータとして機能することができます。

発生する各アクション(クリック、回転など)を保存する予定がない限り、この状況ではデータをモデルに送信する必要はありません。あなたがしたいことはすべて、コントローラで簡単に処理する必要があります。だから、フローは次のようになります。

  • マウスコマンドは、タレットの回転を計算
  • マウスの位置に沿って通過する、
  • イベント(コントローラで)コマンドをトリガするために解雇されたクリック
  • コマンドが伝えますタレットを回転させるビュー

これはもちろん、あなたの例に基づいて私の提案です。実際には、プロジェクトによっては、上記の流れが簡単に変わる可能性があります(たとえば、このような状況ではコマンドで回転計算を行うのが良いと思われますが、それほど意味がない場合もあります)。 MVCを目標にして、できるだけこれらの要素を分離しようとしていますが、それを行うためには100%の「毎回働く」方法がありません。

Robotlegs、人気のMVCフレームワークは、彼らはMVCに取り組ん様子を自分のサイトに大きな図があります。

http://www.robotlegs.org/diagram/

私は(それは良いことだが、そこだあなたはRobotlegsを使用する必要は広告ではありませんよたくさんの他の選択肢)、しかし彼らは間違いなくかなりの図を作った:)

0

ありがとうございます、あなたは現在MouseModelとTurretModelを呼び出していること、それに作品を持っているモデルを、持っている必要があります。それらの名前と故障を保持するか、実行する必要があるものをより良い "ハンドル"にすると、何か他のことを行うことができます。

マウスクリックを追跡しているビューは、ControllerコンポーネントがTurretModelを更新するためにキャッチしたイベントを送出する必要があります(この時点では、おそらくMouseModelは必要ありません)。 TurretViewは、TurretModelに基づいて自身を更新することも、コントローラは新しい値に基づいてTurretViewを更新することもできます。これは、どのように配線したかによって異なります。

Robotlegsのようなフレームワークを使用すると、このプロセスの詳細を把握するのに役立ちます。この書籍http://shop.oreilly.com/product/0636920021216.doは、Robotlegsを使用することを選択しなくても、MVCに関する素晴らしい説明を提供しています。あなたがそれを読んだ後。