首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flex/as3中的MVC原理

flex/as3中的MVC原理
EN

Stack Overflow用户
提问于 2011-08-25 04:19:45
回答 1查看 241关注 0票数 0

我目前正在做几个flex项目,它们在相对较短的时间内从原型到几乎相当大的应用程序。

现在是时候做一些重构了,所以很明显mvc原则就出现在脑海中了。

出于我无法控制的原因,一个框架(例如,robotlegs等)不是一种选择。

这就是我在设计架构时应该考虑的question...what通用指南。

以Also...say为例,我有:视图,Ctrl键,模型。

从视图:

代码语言:javascript
复制
var ctrlInstance:Ctrl= new Ctrl();
ctrl.performControllerMethod();

在控制器中

代码语言:javascript
复制
public function performControllerMethod():void{
    //dome some sort of processing and store the result in the model.
    Model.instance.result = method_scope_result;
}

并基于所存储的值更新视图。

至于在模型中存储值,这些值稍后将在应用程序中动态使用,通过时间过滤或其他操作,一切都很清楚,但在数据只需要进入的情况下(例如,在加载时填充一次的树),这是否真的有必要使用视图->控制器->模型->视图更新方案,或者我是否可以在控制器操作完成后,让控制器实现IEventDispatcher并调度一些保存必要数据的自定义事件。

例如:

查看:

代码语言:javascript
复制
var ctrlInstance:Ctrl= new Ctrl();
ctrl.addEventListener(CustomEv.HAPPY_END, onHappyEnd);
ctrl.addEventListener(CustomEv.SAD_END, onSadEnd);
ctrl.performControllerMethod();

控制器

代码语言:javascript
复制
public function performControllerMethod():void{
   (processOk) ? dispatchEvent(new CustomEv(CustomEv.HAPPY_END, theData)) : dispatchEvent(new CustomEv(CustomEv.SAD_END));
}

当其中一个事件处理程序启动时,对事件侦听器进行清理(通过event.currentTarget)。

因为我意识到这可能不是一个问题,而是一个讨论,所以我很想听听你的意见。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-08-25 07:34:27

在我看来,整个问题的表述方式都忽略了MVC的要点,即避免模型、视图和控制器层之间的耦合。视图应该不知道任何其他层,因为一旦它开始引用体系结构的其他部分,您就不能重用它。

不是常量的静态变量基本上就是自找麻烦的http://misko.hevery.com/2009/07/31/how-to-think-about-oo/。有些人相信你可以通过确保你只通过使用一个控制器来访问这些全局变量来缓解这个问题,但是一旦所有的视图都有了一个控制器,你就会遇到这样一种情况:静态模型可以从任何地方直接改变。

如果您想在不使用特定框架的情况下使用框架的原理,请查看http://www.developria.com/2010/04/combining-the-timeline-with-oo.htmlhttp://www.developria.com/2010/05/pass-the-eventdispatcher-pleas.html。但请记住,已建立的框架已经解决了您将遇到的大多数问题,您可能只使用一个框架会更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7181749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档