パターンを設計する理由または「MVCとは」

すべてのフレームワークで最も重要なことは、それらがすべてアプリケーション作成のルールを決定することです。 アプリケーションでフレームワークを使用したことがない場合は、 それらは小さすぎて、コードの混乱を増やす問題に遭遇しなかった、またはあなたの時間が来なかった:)そして、最終的に、フレームワークのルールによって作成されたアプリケーションは間違いなく正しい形になります。 それは私たち全員が望んでいることではありませんか? プログラミングの初心者は、特定のフレームワークの学習を開始すると、自動的に正しく考えるようになり、それにより前世代の経験を取り入れ、よりスムーズな道を切り開きます。 いずれにせよ、大規模で拡張可能なモジュール式アプリケーションを作成する唯一の方法は、フレームワークを使用することです。



それでは始めましょう...



MVC "Model-view-behavior" === "Model-view-controller"。



目を閉じて、アプリケーションの動作を想像してください。 提示されましたか?...そして、このプロセスを条件付きで3つの抽象的な論理部分に分割してみてください。



すべての視覚コンポーネントの処理を処理するアプリケーションのすべてのメソッド、視覚要素に関する知識を持っているメソッド、画面内でのそれらの移動を処理するメソッドなどを収集します。 それらを精神的にプログラムの一部に結合すると、これは(表現)になります。



次。 アプリケーションのロジックを処理するアプリケーションのすべてのメソッド、何をどのように行うかを知っているメソッドを収集します。 アプリケーションコンポーネントの動作モデル。 それらを精神的にプログラムの一部に結合します。これは(モデル)になります。



3番目の、しかしそれほど重要ではない部分は、モデルの動作自体が実装されるメソッドです。 いわゆる「コントローラー」。 一般的に、これらは、たとえばゲームロスイベントなどによって呼び出されるメソッドです。たとえば、function onLoseLevel(e:SomeEvent):voidです。 この場合、このメソッドは、損失が発生した場合のアプリケーションのモデルの動作です。 レベルを失うとすぐに、特定のケースでアプリケーションの動作を実装する特定のメソッドが呼び出されます。 そのため、1つのヒープで動作を実装するすべてのメソッドを収集します

これは、MVCの概念の3番目の論理部分(コントローラー)になります。



完全に理解しておらず、なぜこのパーティション全体が必要なのかという質問に答えなかった人のために:コードの接続性を減らすため、つまり プロジェクト内の何かを変更しても、変更はプログラムの別の部分には影響しません。 したがって、アプリケーションはより柔軟になり、独立したモジュールで構成され、リファクタリングに適応することができます。



HellowWorldアプリケーションの例でのMVCコンセプトの実装



HelloWorld.as:



package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; public class HelloWorld extends Sprite { private var viewComponent :TextField; public static var model :Model; public static var view :View; public static var controller :Controller; /** * Constructor * */ public function HelloWorld() { /*Add listener to catch an event to add to stage * */ addEventListener(Event.ADDED_TO_STAGE, showTextHandler); /* Creation one view component as TextField * */ viewComponent = new TextField(); addChild(viewComponent); /*Creation the Model * */ model = new Model(); /*Creation the View and giving viewComponent into constructor * */ view = new View(viewComponent); /*Creation the Controller * */ controller = new Controller(); } /*Set the command to handling on the event * */ protected function showTextHandler(event:Event):void { controller.showTextFieldCommand(); } } }
      
      







Model.as



 package { public class Model { private var _textString :String = "Hello World!"; public function Model() { } public function get textString():String { return _textString; } public function set textString(value:String):void { _textString = value; } } }
      
      







View.as:



 package { import flash.text.TextField; public class View { private var _view:Object; public function View(viewObj:Object) { view = viewObj; } /*Method to change text field in the view component * */ public function changeView(str:String):void { view.text = str; } public function set view(value:Object):void { _view = value; } public function get view():Object { return _view; } } }
      
      







Controller.as:



 package { public class Controller { public function showTextFieldCommand():void { var str:String = HelloWorld.model.textString; HelloWorld.view.changeView(str); } } }
      
      







わかった ここで何が起こるか見てみましょう。 アプリケーションのメインクラスであるHelloWorld.asがあり、これがすべてを担当します。 その中で、TextFieldタイプ(テキストフィールド)の単一のビジュアルコンポーネントと、Model.as、View.as、およびController.asのインスタンスを作成します。 今、それをすべて接続する方法は?



まず、ビジュアルコンポーネントをコンストラクタに渡すことにより、Viewコントロールに渡します。

  view = new View(viewComponent);
      
      







artemfedorov.com/?p=64

これで、ビューはコンポーネントを認識しました。

次に、コンポーネントに影響を与えることができるメソッドをビューに追加します。



  public function changeView(str:String):void { view.text = str; }
      
      







コンポーネントのテキストフィールドにString型の新しい値を割り当てるだけです。



この例のモデルには、文字列変数の値に関する知識のみが含まれ、ビジネスロジックはこれに限定されます。



  private var _textString :String = "Hello World!";
      
      







また、コントローラーには、モデルから値を受け取り、実行する必要があることをViewに伝えるコマンドが1つだけ含まれています。



  public function showTextFieldCommand():void { var str:String = HelloWorld.model.textString; HelloWorld.view.changeView(str); }
      
      







さらに、このイベントが機能しない最後の仕上げ。 ここでは、イベントの例として、ステージで追加が発生したときに発生するイベントを選択し、リスナーを追加しました。

addEventListener(Event.ADDED_TO_STAGE、showTextHandler);



このイベントに、アプリケーションの動作を実装するコマンドを添付しました。



  protected function showTextHandler(event:Event):void { controller.showTextFieldCommand(); }
      
      







www.artemfedorov.com

以上です!



All Articles