gpt4 book ai didi

actionscript-3 - 这是 Actionscript 3 中 MVC 的正确实现吗?

转载 作者:行者123 更新时间:2023-12-04 15:26:03 26 4
gpt4 key购买 nike

该程序所做的只是您单击一个按钮,它会告诉您在文本字段中单击该按钮的次数。

文档类:这是代码的入口点。

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);
}
}
}

模型类:基本模型代码。
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;
}
}
}

控制类:在这里控制模型和 View 的输入和更新。
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;
}
}
}

View 类:程序的可视化表示。
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);
}
}
}

最佳答案

在传统的 MVC 模式中, View 确实像 www0z0k 所写的那样直接依赖于模型,但我也认为这不是一个理想的解决方案。

他们设置了 Controller ,它充当模型和 View 之间的中介,这当然是一个非常有效的解决方案。

但是,如果您希望从模型到 View 进行更直接的通信(它将为您节省一些代码),您可以创建一个中央事件调度程序,将其传递给模型并让他们使用中央事件调度程序来调度他们的更新事件,然后也传递将事件调度器集中到 View ,让 View 直接监听模型调度的事件。这样 View 就不会直接依赖于模型,但它仍然可以监听它们发送的事件。在这种情况下, Controller 只会将 View 事件转换为模型。

图表:
http://bit.ly/sTSDVT

Controller 直接更新模型,但它也监听中央事件调度程序以获取模型的更新(如果需要)并将它们转换为 View 。
它还监听 View 事件

该模型仅依赖于事件调度程序,并使用它来调度更新事件。

View 只依赖于事件调度器,并监听来自模型的更新事件。它也调度自己的事件。 (您可以为此使用中央事件调度程序,但我不推荐它)

关于actionscript-3 - 这是 Actionscript 3 中 MVC 的正确实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com