我目前正在做几个flex项目,它们在相对较短的时间内从原型到几乎相当大的应用程序。
现在是时候做一些重构了,所以很明显mvc原则就出现在脑海中了。
出于我无法控制的原因,一个框架(例如,robotlegs等)不是一种选择。
这就是我在设计架构时应该考虑的question...what通用指南。
以Also...say为例,我有:视图,Ctrl键,模型。
从视图:
var ctrlInstance:Ctrl= new Ctrl();
ctrl.performControllerMethod();在控制器中
public function performControllerMethod():void{
//dome some sort of processing and store the result in the model.
Model.instance.result = method_scope_result;
}并基于所存储的值更新视图。
至于在模型中存储值,这些值稍后将在应用程序中动态使用,通过时间过滤或其他操作,一切都很清楚,但在数据只需要进入的情况下(例如,在加载时填充一次的树),这是否真的有必要使用视图->控制器->模型->视图更新方案,或者我是否可以在控制器操作完成后,让控制器实现IEventDispatcher并调度一些保存必要数据的自定义事件。
例如:
查看:
var ctrlInstance:Ctrl= new Ctrl();
ctrl.addEventListener(CustomEv.HAPPY_END, onHappyEnd);
ctrl.addEventListener(CustomEv.SAD_END, onSadEnd);
ctrl.performControllerMethod();控制器
public function performControllerMethod():void{
(processOk) ? dispatchEvent(new CustomEv(CustomEv.HAPPY_END, theData)) : dispatchEvent(new CustomEv(CustomEv.SAD_END));
}当其中一个事件处理程序启动时,对事件侦听器进行清理(通过event.currentTarget)。
因为我意识到这可能不是一个问题,而是一个讨论,所以我很想听听你的意见。
谢谢。
发布于 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.html和http://www.developria.com/2010/05/pass-the-eventdispatcher-pleas.html。但请记住,已建立的框架已经解决了您将遇到的大多数问题,您可能只使用一个框架会更好。
https://stackoverflow.com/questions/7181749
复制相似问题