Todo lo que hace el programa es hacer clic en un botón y le dice cuántas veces hizo clic en el botón en un campo de texto.¿Es esta una implementación correcta de MVC en Actionscript 3?
Clase de documento: este es el punto de entrada del código.
package {
import flash.display.MovieClip;
/**
* MVCTest.as
* @author rotaercz
*/
public class MVCTest extends MovieClip {
private var _model:Model;
private var _view:View;
private var _control:Control;
public function MVCTest() {
_model = new Model();
_view = new View(this);
_control = new Control(_model, _view);
}
}
}
Clase de modelo: El código de modelo básico.
package {
/**
* Model.as
* @author rotaercz
*/
public class Model {
private var _totalClicks:int;
public function AddClick():void {
_totalClicks++;
}
public function get Clicks():int {
return _totalClicks;
}
public function Model() {
_totalClicks = 0;
}
}
}
Clase de control: controla tanto la entrada como la actualización del modelo y la vista aquí.
package {
import flash.events.MouseEvent;
/**
* Control.as
* @author rotaercz
*/
public class Control {
private var _model:Model;
private var _view:View;
public function Control(model:Model, view:View):void {
_model = model;
_view = view;
_view.addEventListener(MouseEvent.CLICK, OnClick);
}
private function OnClick(e:MouseEvent):void {
_model.AddClick();
_view.Text = "clicked " + _model.Clicks;
}
}
}
Ver clase: La representación visual del programa.
package {
import flash.display.MovieClip;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
import flash.text.TextField;
/**
* View.as
* @author rotaercz
*/
public class View extends EventDispatcher {
private var _parent:MovieClip;
private var _button:MovieClip;
private var _dt:TextField;
public function set Text(s:String):void {
_dt.text = s;
}
public function View(parent:MovieClip) {
_parent = parent;
_dt = _parent.getChildByName("dt") as TextField;
_button = _parent.getChildByName("mcButton") as MovieClip;
_button.addEventListener(MouseEvent.CLICK, OnClick);
}
private function OnClick(e:MouseEvent):void {
dispatchEvent(e);
}
}
}
si no planea usar métodos específicos en MovieClip (IE: 'gotoAndPlay()', etc.), debería usar Sprite en su lugar. Además, a diferencia de CPP, la convención para nombrar funciones de una clase (excepto para el constructor) comienza con minúsculas (IE: 'myFunction()' en vez de 'MyFunction()') – TheDarkIn1978
, por supuesto, eso es simplemente una cuestión de estilo personal mientras se podría argumentar que esta convención es aún más confusa de tener solo el nombre del constructor comenzar con una letra mayúscula. – TheDarkIn1978
, que de hecho es menos confuso, ES el constructor y, por lo tanto, refleja el nombre de clase. Tener miembros capitalizados es una gran IMO no-no, realmente no está claro si se está dirigiendo a un miembro de instancia miembro o miembro estático de una clase. – Creynders