- 浏览: 68597 次
- 性别:
- 来自: 楼兰
最新评论
-
小蝶兒:
flash builder4.5+eclipse4.2.2可以 ...
flash builder4.5.1 for eclipse,Flex -
java0720:
[color=violet][/color]
Jaxb教程 -
xiao_kai:
受教了,谢谢
Flex布局之关于组件的大小 -
ltian:
AAries 写道flex 企业应用开发实战 确实不错。 感 ...
关于Flex的自言自语 -
AAries:
支持一下这本书
《Flex/Java企业应用开发实战》即将出版
时下,国人都热衷于开源框架,其实很多开源框架并不实用,开源框架成千上万,好用的还是少数,有时候,真得还要靠自己去造一些轮子。在Flex开发领域,较有名气的框架有两个,Cairongorm和pureMvc,在2007年的时候我曾在博客上分享了这两个框架的一些资料。
但经过一段时间的实践,我认为这些框架均不实用。
cairongorm过于死板,完成一个工作需要N多类,做很多事情都是在舍近求远。
pureMvc虽然比较灵活,考虑了视图的复用。但是工程大而视图复用很少的时候,使用这个框架非常不合适。当实在需要视图复用时,可以考虑使用pureMvc框架。另外,使用pureMvc要注意在你的窗口关闭时要及时清除已经注册的资源,否则会导致内存泄露。
以上还都是小问题,大问题在于,不论cairongorm和pureMvc,都是基于事件(消息),一个事件(消息)发出后,就很难知道那些组件对这些事件和消息感兴趣,也很难知道那个组件对这个消息或者事件进行了监听和处理。造成程序的调试和维护相当困难。很多隐藏的BUg都是因此而产生的。
所以建议不要使用这两个框架。我们在项目中因使用pureMvc吃了很多苦头,希望后来者重视。
我建议开发者按照如下思路进行Flex开发,也是按照MVC思路设计的。
1.写一个mxml文件和一个as文件,二者名称相同但是扩展名不同。
2.mxml文件作为视图和视图控制控制器(视图跳转、弹出的逻辑放在MXML文件中,因为子视图的弹出往往需要主视图作为参数),as文件作为model。
model上定义视图所需要的数据和数据的处理逻辑(比如,获取远程的数据等)。
mxml上的控件绑定model上的数据。model无需知道mxml,mxml在创建时需要引用model。
3.当用户操作界面发生请求需要处理数据时,mxml上的响应控件事件的处理函数调用model上的方法,改变数据,改变后的数据通过绑定功能自动地刷新界面(mxml所生成的swf)。
这样做的最大好处就是便于调试,其次是把视图部分和数据以及数据处理部分分离,当视图上的控件发生变化不会影响数据处理的业务。
具体的例子如下:
这是一个视图的MXML,用来实现通用“资源”选择。包括全选、反选,按下确定按钮就会返回已被选择的资源数据。这里的<MinizableTitleWindow>是一个自定义组件,可以帮它当做panel。
<?xml version="1.0" encoding="utf-8"?>
<MinizableTitleWindow
xmlns="com.xdfsoft.controls.*"
xmlns:mx="http://www.adobe.com/2006/mxml" width="500" height="400"
showMinimizeButton="false" title="资源选择">
<mx:Script>
<![CDATA[
import com.xdfsoft.right.model.ListResSelectModel;
[Bindable]
public var model:ListResSelectModel;
]]>
</mx:Script>
<mx:VBox width="100%" height="100%" verticalGap="0">
<mx:Canvas width="100%" height="100%">
<mx:DataGrid height="100%" width="100%" dataProvider="{this.model.resObjList}">
<mx:columns>
<mx:DataGridColumn headerText="选择" width="100" >
<mx:itemRenderer>
<mx:Component>
<mx:VBox horizontalAlign="center" verticalAlign="middle">
<mx:CheckBox click="{data.selected=!data.selected}" selected="{data.selected}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="资源编号" width="200" dataField="resourceObjectCode"/>
<mx:DataGridColumn headerText="资源名称" width="400" dataField="resourceObjectName"/>
</mx:columns>
</mx:DataGrid>
</mx:Canvas>
<mx:Canvas width="100%" height="12%">
<mx:Button x="283" y="7" label="确定" click="{this.model.doSelectOk(this);}"/>
<mx:Button x="358" y="7" label="取消" click="{this.model.doSelectCancel(this);}"/>
<mx:LinkButton x="18" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="全选" click="{this.model.doSelectAll(1);}"/>
<mx:LinkButton x="70" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="反向选择" click="{this.model.doSelectAll(2);}" />
<mx:LinkButton x="146" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="清除选择" click="{this.model.doSelectAll(0);}"/>
</mx:Canvas>
</mx:VBox>
</MinizableTitleWindow>
上面视图MXML对应的AS类模型如下:
package com.xdfsoft.right.model
{
import com.xdfsoft.controls.MessageBox;
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.collections.ArrayCollection;
import mx.core.IFlexDisplayObject;
import mx.managers.PopUpManager;
public class ListResSelectModel extends EventDispatcher
{
private var _resObjList:ArrayCollection=null;
private var _onSelectOk:Function;
private var _onSelectCancel:Function;
private var _otherArgs:Array;
public function ListResSelectModel(resObjList:ArrayCollection,onSelectOk:Function,onSelectCancel:Function=null,otherArgs:Array=null)
{
this.resObjList=resObjList;
this._onSelectOk=onSelectOk;
this._onSelectCancel=onSelectCancel;
this._otherArgs=otherArgs;
}
[Bindable(event="resObjListChange")]
public function get resObjList():ArrayCollection
{
return this._resObjList;
}
public function set resObjList(resObjList:ArrayCollection):void
{
if (this._resObjList==resObjList) return;
this._resObjList=resObjList;
dispatchEvent(new Event("resObjListChange"));
}
public function doSelectOk(window:IFlexDisplayObject):void
{
if (this._onSelectOk==null) return;
var selResObjs:Array=this.getSelectResObjs();
if (selResObjs.length==0)
{
MessageBox.note("请选择一个或者多个资源再执行此操作");
return;
}
var args:Array=this._otherArgs.concat();
args.splice(0,0,selResObjs);
this._onSelectOk.apply(this,args);
PopUpManager.removePopUp(window);
}
public function doSelectCancel(window:IFlexDisplayObject):void
{
if (this._onSelectCancel!=null)
{
this._onSelectCancel.apply(this);
}
PopUpManager.removePopUp(window);
}
private function getSelectResObjs():Array
{
var result:Array=new Array();
if (this.resObjList==null) return result;
for each(var resObj:ResourceObjVo in this.resObjList)
{
if (resObj.selected)
{
result.push(resObj);
}
}
return result;
}
public function doSelectAll(flag:int):void
{
for each(var resObj:ResourceObjVo in this.resObjList)
{
switch(flag)
{
case 0:
resObj.selected=false;
break;
case 1:
resObj.selected=true;
break;
case 2:
resObj.selected=!resObj.selected;
break;
}
}
}
}
}
除了这些之外,我觉得为了化简Flex的开发,大家可以自己动手造一些框架,比如说仿照Java Colleciton框架造AS下的Collection框架。造一个类库对远程调用进行封装,以简化远程调用。造一些常用窗口的MXML模板库,简化常用的维护、查询窗口的开发,.......通过构建这些针对应用开发中特定领域的框架对应用开发带来的简化远比用类似 Cairongorm,pureMvc这些万能丹要好的多。我们需要的是开阔思路,不要被外国的轮子迷了眼,其实这些轮子代码不复杂,功能也不强大。
多人进行一个项目开发,如何进行代码的管理,如防止冲突,代码共享等问题。 应该是版本控制软件的功能。
本身页面需要调转连接多个页面,如此简单的事情难道也需要框架去做?
嘿嘿,其实Flex比Java简单些。只不过他刚开始没用好,而且用了PureMvc这样的框架!!用不好的框架比不用强,PureMvc,Cairngrom都属于过犹不及的东西。
ltian 写道whaosoft 写道puremvc&amp;nbsp; 中你吃的苦头是什么呢???puremvc最大的烦恼就是过于灵活了:第一点:发出一个消息之后很难知道谁对之感兴趣,导致程序胡乱响应(程序员无意中让某个视图对某个消息感兴趣,而其他的视图恰好也对同样的消息感兴趣,当两个视图组合在一起的时候,可能就会产生冲突,多视图组合时往往更加容易混乱),虽然说管理上应该加强,但是,大家很难在设计之初就考虑的非常全面,难免要犯错误,一旦出现这样的错误,则几乎无法调试,我认为这是最大的问题。第二点就是PureMvc框架中M,V,C 都基于单例模式,如果注册了view却忘记反注册,则肯定会导致内存泄漏。第三点就是如果我们的项目中同时打开多个窗口,需要使用多核的PureMvc,我们才开始用PureMvc的时候,多核PureMvc还没有出现,后来才出现,为此我们又是改了又改。&nbsp;&nbsp;&nbsp; 最后,干脆将PureMvc干掉,所有的代码按照上述简单的模式处理,发现程序既稳定又容易理解,更容易调试和跟踪。调试和跟踪是方便了,你有考虑过以upgrade,或者修改logic之后couple太紧导致的regression吗?
您担心谁和谁copule太紧呢?您觉得在什么样的升起级情况下会导致regression?我仍然觉得使用消息解耦适合在系统与系统之间,JMS就是为了这个而产生的。但是一个人机界面的不同部分也要使用消息解耦,我们团队的实践结果表明这会导致很多混乱。如果系统难以维护,何谈upgrade?
whaosoft 写道puremvc&nbsp; 中你吃的苦头是什么呢???puremvc最大的烦恼就是过于灵活了:第一点:发出一个消息之后很难知道谁对之感兴趣,导致程序胡乱响应(程序员无意中让某个视图对某个消息感兴趣,而其他的视图恰好也对同样的消息感兴趣,当两个视图组合在一起的时候,可能就会产生冲突,多视图组合时往往更加容易混乱),虽然说管理上应该加强,但是,大家很难在设计之初就考虑的非常全面,难免要犯错误,一旦出现这样的错误,则几乎无法调试,我认为这是最大的问题。第二点就是PureMvc框架中M,V,C 都基于单例模式,如果注册了view却忘记反注册,则肯定会导致内存泄漏。第三点就是如果我们的项目中同时打开多个窗口,需要使用多核的PureMvc,我们才开始用PureMvc的时候,多核PureMvc还没有出现,后来才出现,为此我们又是改了又改。 最后,干脆将PureMvc干掉,所有的代码按照上述简单的模式处理,发现程序既稳定又容易理解,更容易调试和跟踪。
调试和跟踪是方便了,你有考虑过以upgrade,或者修改logic之后couple太紧导致的regression吗?
puremvc 中你吃的苦头是什么呢???
puremvc最大的烦恼就是过于灵活了:
第一点:发出一个消息之后很难知道谁对之感兴趣,导致程序胡乱响应(程序员无意中让某个视图对某个消息感兴趣,而其他的视图恰好也对同样的消息感兴趣,当两个视图组合在一起的时候,可能就会产生冲突,多视图组合时往往更加容易混乱),虽然说管理上应该加强,但是,大家很难在设计之初就考虑的非常全面,难免要犯错误,一旦出现这样的错误,则几乎无法调试,我认为这是最大的问题。
第二点就是PureMvc框架中M,V,C 都基于单例模式,如果注册了view却忘记反注册,则肯定会导致内存泄漏。
第三点就是如果我们的项目中同时打开多个窗口,需要使用多核的PureMvc,我们才开始用PureMvc的时候,多核PureMvc还没有出现,后来才出现,为此我们又是改了又改。
最后,干脆将PureMvc干掉,所有的代码按照上述简单的模式处理,发现程序既稳定又容易理解,更容易调试和跟踪。
但经过一段时间的实践,我认为这些框架均不实用。
cairongorm过于死板,完成一个工作需要N多类,做很多事情都是在舍近求远。
pureMvc虽然比较灵活,考虑了视图的复用。但是工程大而视图复用很少的时候,使用这个框架非常不合适。当实在需要视图复用时,可以考虑使用pureMvc框架。另外,使用pureMvc要注意在你的窗口关闭时要及时清除已经注册的资源,否则会导致内存泄露。
以上还都是小问题,大问题在于,不论cairongorm和pureMvc,都是基于事件(消息),一个事件(消息)发出后,就很难知道那些组件对这些事件和消息感兴趣,也很难知道那个组件对这个消息或者事件进行了监听和处理。造成程序的调试和维护相当困难。很多隐藏的BUg都是因此而产生的。
所以建议不要使用这两个框架。我们在项目中因使用pureMvc吃了很多苦头,希望后来者重视。
我建议开发者按照如下思路进行Flex开发,也是按照MVC思路设计的。
1.写一个mxml文件和一个as文件,二者名称相同但是扩展名不同。
2.mxml文件作为视图和视图控制控制器(视图跳转、弹出的逻辑放在MXML文件中,因为子视图的弹出往往需要主视图作为参数),as文件作为model。
model上定义视图所需要的数据和数据的处理逻辑(比如,获取远程的数据等)。
mxml上的控件绑定model上的数据。model无需知道mxml,mxml在创建时需要引用model。
3.当用户操作界面发生请求需要处理数据时,mxml上的响应控件事件的处理函数调用model上的方法,改变数据,改变后的数据通过绑定功能自动地刷新界面(mxml所生成的swf)。
这样做的最大好处就是便于调试,其次是把视图部分和数据以及数据处理部分分离,当视图上的控件发生变化不会影响数据处理的业务。
具体的例子如下:
这是一个视图的MXML,用来实现通用“资源”选择。包括全选、反选,按下确定按钮就会返回已被选择的资源数据。这里的<MinizableTitleWindow>是一个自定义组件,可以帮它当做panel。
<?xml version="1.0" encoding="utf-8"?>
<MinizableTitleWindow
xmlns="com.xdfsoft.controls.*"
xmlns:mx="http://www.adobe.com/2006/mxml" width="500" height="400"
showMinimizeButton="false" title="资源选择">
<mx:Script>
<![CDATA[
import com.xdfsoft.right.model.ListResSelectModel;
[Bindable]
public var model:ListResSelectModel;
]]>
</mx:Script>
<mx:VBox width="100%" height="100%" verticalGap="0">
<mx:Canvas width="100%" height="100%">
<mx:DataGrid height="100%" width="100%" dataProvider="{this.model.resObjList}">
<mx:columns>
<mx:DataGridColumn headerText="选择" width="100" >
<mx:itemRenderer>
<mx:Component>
<mx:VBox horizontalAlign="center" verticalAlign="middle">
<mx:CheckBox click="{data.selected=!data.selected}" selected="{data.selected}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="资源编号" width="200" dataField="resourceObjectCode"/>
<mx:DataGridColumn headerText="资源名称" width="400" dataField="resourceObjectName"/>
</mx:columns>
</mx:DataGrid>
</mx:Canvas>
<mx:Canvas width="100%" height="12%">
<mx:Button x="283" y="7" label="确定" click="{this.model.doSelectOk(this);}"/>
<mx:Button x="358" y="7" label="取消" click="{this.model.doSelectCancel(this);}"/>
<mx:LinkButton x="18" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="全选" click="{this.model.doSelectAll(1);}"/>
<mx:LinkButton x="70" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="反向选择" click="{this.model.doSelectAll(2);}" />
<mx:LinkButton x="146" y="10" color="blue" fontWeight="normal" textDecoration="underline" label="清除选择" click="{this.model.doSelectAll(0);}"/>
</mx:Canvas>
</mx:VBox>
</MinizableTitleWindow>
上面视图MXML对应的AS类模型如下:
package com.xdfsoft.right.model
{
import com.xdfsoft.controls.MessageBox;
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.collections.ArrayCollection;
import mx.core.IFlexDisplayObject;
import mx.managers.PopUpManager;
public class ListResSelectModel extends EventDispatcher
{
private var _resObjList:ArrayCollection=null;
private var _onSelectOk:Function;
private var _onSelectCancel:Function;
private var _otherArgs:Array;
public function ListResSelectModel(resObjList:ArrayCollection,onSelectOk:Function,onSelectCancel:Function=null,otherArgs:Array=null)
{
this.resObjList=resObjList;
this._onSelectOk=onSelectOk;
this._onSelectCancel=onSelectCancel;
this._otherArgs=otherArgs;
}
[Bindable(event="resObjListChange")]
public function get resObjList():ArrayCollection
{
return this._resObjList;
}
public function set resObjList(resObjList:ArrayCollection):void
{
if (this._resObjList==resObjList) return;
this._resObjList=resObjList;
dispatchEvent(new Event("resObjListChange"));
}
public function doSelectOk(window:IFlexDisplayObject):void
{
if (this._onSelectOk==null) return;
var selResObjs:Array=this.getSelectResObjs();
if (selResObjs.length==0)
{
MessageBox.note("请选择一个或者多个资源再执行此操作");
return;
}
var args:Array=this._otherArgs.concat();
args.splice(0,0,selResObjs);
this._onSelectOk.apply(this,args);
PopUpManager.removePopUp(window);
}
public function doSelectCancel(window:IFlexDisplayObject):void
{
if (this._onSelectCancel!=null)
{
this._onSelectCancel.apply(this);
}
PopUpManager.removePopUp(window);
}
private function getSelectResObjs():Array
{
var result:Array=new Array();
if (this.resObjList==null) return result;
for each(var resObj:ResourceObjVo in this.resObjList)
{
if (resObj.selected)
{
result.push(resObj);
}
}
return result;
}
public function doSelectAll(flag:int):void
{
for each(var resObj:ResourceObjVo in this.resObjList)
{
switch(flag)
{
case 0:
resObj.selected=false;
break;
case 1:
resObj.selected=true;
break;
case 2:
resObj.selected=!resObj.selected;
break;
}
}
}
}
}
除了这些之外,我觉得为了化简Flex的开发,大家可以自己动手造一些框架,比如说仿照Java Colleciton框架造AS下的Collection框架。造一个类库对远程调用进行封装,以简化远程调用。造一些常用窗口的MXML模板库,简化常用的维护、查询窗口的开发,.......通过构建这些针对应用开发中特定领域的框架对应用开发带来的简化远比用类似 Cairongorm,pureMvc这些万能丹要好的多。我们需要的是开阔思路,不要被外国的轮子迷了眼,其实这些轮子代码不复杂,功能也不强大。
评论
14 楼
176170847
2010-12-21
呵呵,其实我觉得神马,框架都是浮云
关键是你的团队中要有一个高手,不管是对于Flex技术,还是个人思维逻辑,以及软件体系,目的各方面的思维都非常清晰的人存在。这样,不管你的系统要做成什么样,都不会是问题。
怕就怕一个团队都是垃圾,还都自以为是,项目经理也是靠资历混上去的,这样才是最恐怖的。
关键是你的团队中要有一个高手,不管是对于Flex技术,还是个人思维逻辑,以及软件体系,目的各方面的思维都非常清晰的人存在。这样,不管你的系统要做成什么样,都不会是问题。
怕就怕一个团队都是垃圾,还都自以为是,项目经理也是靠资历混上去的,这样才是最恐怖的。
13 楼
ltian
2010-06-03
lusiyang 写道
如果不使用框架的话,多个人进行一个项目的开发。
1.如何进行代码的管理,如防止冲突,代码共享等问题。
2.如果本身页面需要跳转链接多个页面,多个相应,如何处理啊。
1.如何进行代码的管理,如防止冲突,代码共享等问题。
2.如果本身页面需要跳转链接多个页面,多个相应,如何处理啊。
多人进行一个项目开发,如何进行代码的管理,如防止冲突,代码共享等问题。 应该是版本控制软件的功能。
本身页面需要调转连接多个页面,如此简单的事情难道也需要框架去做?
12 楼
lusiyang
2010-06-01
如果不使用框架的话,多个人进行一个项目的开发。
1.如何进行代码的管理,如防止冲突,代码共享等问题。
2.如果本身页面需要跳转链接多个页面,多个相应,如何处理啊。
1.如何进行代码的管理,如防止冲突,代码共享等问题。
2.如果本身页面需要跳转链接多个页面,多个相应,如何处理啊。
11 楼
ltian
2010-04-26
skyfen 写道
同意你的说话哦.我的搭挡是做flex的,我的做后台的,我改一个后程序,他要做一个做flex程序,他做很费力,他用的就是pureMVC.有时我看到他改的很费劲,庆幸自己没做flex
嘿嘿,其实Flex比Java简单些。只不过他刚开始没用好,而且用了PureMvc这样的框架!!用不好的框架比不用强,PureMvc,Cairngrom都属于过犹不及的东西。
10 楼
skyfen
2010-03-28
同意你的说话哦.我的搭挡是做flex的,我的做后台的,我改一个后程序,他要做一个做flex程序,他做很费力,他用的就是pureMVC.有时我看到他改的很费劲,庆幸自己没做flex
9 楼
ltian
2009-04-24
jove.shi 写道
ltian 写道whaosoft 写道puremvc&amp;nbsp; 中你吃的苦头是什么呢???puremvc最大的烦恼就是过于灵活了:第一点:发出一个消息之后很难知道谁对之感兴趣,导致程序胡乱响应(程序员无意中让某个视图对某个消息感兴趣,而其他的视图恰好也对同样的消息感兴趣,当两个视图组合在一起的时候,可能就会产生冲突,多视图组合时往往更加容易混乱),虽然说管理上应该加强,但是,大家很难在设计之初就考虑的非常全面,难免要犯错误,一旦出现这样的错误,则几乎无法调试,我认为这是最大的问题。第二点就是PureMvc框架中M,V,C 都基于单例模式,如果注册了view却忘记反注册,则肯定会导致内存泄漏。第三点就是如果我们的项目中同时打开多个窗口,需要使用多核的PureMvc,我们才开始用PureMvc的时候,多核PureMvc还没有出现,后来才出现,为此我们又是改了又改。&nbsp;&nbsp;&nbsp; 最后,干脆将PureMvc干掉,所有的代码按照上述简单的模式处理,发现程序既稳定又容易理解,更容易调试和跟踪。调试和跟踪是方便了,你有考虑过以upgrade,或者修改logic之后couple太紧导致的regression吗?
您担心谁和谁copule太紧呢?您觉得在什么样的升起级情况下会导致regression?我仍然觉得使用消息解耦适合在系统与系统之间,JMS就是为了这个而产生的。但是一个人机界面的不同部分也要使用消息解耦,我们团队的实践结果表明这会导致很多混乱。如果系统难以维护,何谈upgrade?
8 楼
jove.shi
2009-04-24
ltian 写道
whaosoft 写道puremvc&nbsp; 中你吃的苦头是什么呢???puremvc最大的烦恼就是过于灵活了:第一点:发出一个消息之后很难知道谁对之感兴趣,导致程序胡乱响应(程序员无意中让某个视图对某个消息感兴趣,而其他的视图恰好也对同样的消息感兴趣,当两个视图组合在一起的时候,可能就会产生冲突,多视图组合时往往更加容易混乱),虽然说管理上应该加强,但是,大家很难在设计之初就考虑的非常全面,难免要犯错误,一旦出现这样的错误,则几乎无法调试,我认为这是最大的问题。第二点就是PureMvc框架中M,V,C 都基于单例模式,如果注册了view却忘记反注册,则肯定会导致内存泄漏。第三点就是如果我们的项目中同时打开多个窗口,需要使用多核的PureMvc,我们才开始用PureMvc的时候,多核PureMvc还没有出现,后来才出现,为此我们又是改了又改。 最后,干脆将PureMvc干掉,所有的代码按照上述简单的模式处理,发现程序既稳定又容易理解,更容易调试和跟踪。
调试和跟踪是方便了,你有考虑过以upgrade,或者修改logic之后couple太紧导致的regression吗?
7 楼
jove.shi
2009-04-24
你这个Presentation Model又有点奇怪,主要是那几个callback function,而且没办法抽取interface,将来可能会造成很难维护。。。建议在View里用个Observe去reponse to model change...
* State is in the presentation model
* Logic is in the presentation model
* View observes the model and updates accordingly
* The view “knows” about the presentation model
* The presentation model does NOT “know” about the view
不过Presentation Model也有它自身的问题,最终看是看项目适合用哪种Presentation pattern了
* State is in the presentation model
* Logic is in the presentation model
* View observes the model and updates accordingly
* The view “knows” about the presentation model
* The presentation model does NOT “know” about the view
不过Presentation Model也有它自身的问题,最终看是看项目适合用哪种Presentation pattern了
6 楼
ltian
2009-04-17
whaosoft 写道
puremvc 中你吃的苦头是什么呢???
puremvc最大的烦恼就是过于灵活了:
第一点:发出一个消息之后很难知道谁对之感兴趣,导致程序胡乱响应(程序员无意中让某个视图对某个消息感兴趣,而其他的视图恰好也对同样的消息感兴趣,当两个视图组合在一起的时候,可能就会产生冲突,多视图组合时往往更加容易混乱),虽然说管理上应该加强,但是,大家很难在设计之初就考虑的非常全面,难免要犯错误,一旦出现这样的错误,则几乎无法调试,我认为这是最大的问题。
第二点就是PureMvc框架中M,V,C 都基于单例模式,如果注册了view却忘记反注册,则肯定会导致内存泄漏。
第三点就是如果我们的项目中同时打开多个窗口,需要使用多核的PureMvc,我们才开始用PureMvc的时候,多核PureMvc还没有出现,后来才出现,为此我们又是改了又改。
最后,干脆将PureMvc干掉,所有的代码按照上述简单的模式处理,发现程序既稳定又容易理解,更容易调试和跟踪。
5 楼
whaosoft
2009-04-17
puremvc 中你吃的苦头是什么呢???
4 楼
edi
2009-04-15
思路不错。那两个框架俺也没用。
3 楼
mygol
2009-04-14
你使用的实际上是一个presentaton model.
我最后选择了swiz框架,它不强制要求分层,另外使用一个mxml继承一个as,如在loginView.mxml中<view:LoginViewBase>...</view:LoginViewBase>.loginView只显示控件.loginViewBase中做view相关逻辑.
我最后选择了swiz框架,它不强制要求分层,另外使用一个mxml继承一个as,如在loginView.mxml中<view:LoginViewBase>...</view:LoginViewBase>.loginView只显示控件.loginViewBase中做view相关逻辑.
2 楼
mygol
2009-04-12
能写得再具体点吗.最好能写个示例代码
1 楼
mygol
2009-04-12
我觉得puremvc之类的框架过于泛滥的使用事件.
发表评论
-
BlazeDs在JBoss下,使用Xpath时的问题
2011-10-15 00:33 2380如果使用BlazeDS,那么在WEB-INF/lib 下拷入B ... -
flash builder4.5.1 for eclipse,Flex
2011-09-20 14:30 4359转载自http://www.jinflex.com 现在的f ... -
这几天FLex广告挺多的,咱也给FLex做个广告
2010-07-31 19:03 1964凡提到FLex,在这个论坛上就有人说误导,就有人说出广告,今天 ... -
《Flex/Java企业应用开发实战》已经出版,可以网购!
2010-05-31 17:52 2064感谢大家的关注,《Flex/Java企业应用开发实战》已经出版 ... -
比较好的一个官方Flex入门教程
2009-06-04 14:08 1593说明: 1.是Flex2.0.1的,不过在Flex3下完全能运 ... -
关于Flex的自言自语
2009-04-08 17:10 29951.为什么要用Flex+Java进 ... -
一个已经实际运行数月的Flex/Java企业应用
2009-04-08 16:48 6783详见: http://bbs.airia.cn/FLEX/th ... -
Flex help之Flex 皮肤
2009-04-08 11:16 1388对Flex帮助中皮肤的翻译,个人受益匪浅 -
FLEX数据绑定专题.
2009-04-08 11:10 1749Flex的数据绑定是Flex的一项重要功能,不了解Flex数据 ... -
带宽对Flex应用没有多大影响
2009-04-08 11:07 1809我们的项目已经实际运行(这是一个电力系统电费计算及收费的系统, ... -
Flash虚拟机内存管理机制及如何避免Flex内存泄露
2009-04-08 11:01 5992通过搜集网上资料及自己做的相关实验总结,希望对Flex那些期望 ... -
Flex布局之关于组件的大小
2009-04-07 20:06 2729组件的大小(size)就是指组件的高度和宽度。查看Flex帮助 ...
相关推荐
标题与描述概述的知识点是关于如何将Flex框架嵌入到JSP页面中,以实现更丰富的数据可视化功能,特别是图表的展示。以下是基于标题、描述、标签以及部分内容的详细解析和扩展。 ### Flex嵌入JSP开发心得 #### 1. ...
Flex是一种基于ActionScript 3.0的开源框架,主要用于创建富互联网应用程序(RIA),它可以构建在Adobe Flash Player或Adobe AIR之上。在这个特定的项目中,"Flex做的mp3完整播放器"是一个使用Flex技术实现的音乐...
我沉浸于学习Hibernate、Spring、Ajax和Flex等流行技术之中,深信这些工具的熟练使用代表了高超的技术水平。 然而,随着我逐渐深入到项目实践中,我开始意识到一个深刻的问题:技术追求不应仅限于学习和使用流行的...
通过实际操作,我对Flex界面开发、Hibernate数据持久化以及Oracle数据库管理有了更深入的体会。这些宝贵的经验,不仅让我对项目的整体架构有了更全面的了解,也使我能够在项目中扮演更重要的角色。 然而,自我反思...
可使用标准Windows元素创建图形用户界面(GUI)屏幕,包括框架窗口、会话、菜单、工具栏、标签、按钮、复选框、单选按钮、滚动条、滑动调节框、微调框、组合框、树列表、列表框、编辑框以及静态文本等。 通过现有...
功夫不负有心人,终于我找到一个聊天室的小例子,但是功能差的太远,于是我把这个例如一点点的研究,从一点也不懂到后来慢慢看懂,从对AJAX技术一无所知到根本熟练运用。接下来我就开始自己开发,到最后终于把它开发...
例如,`color`改变文本颜色,`font-size`调整字体大小,`margin`和`padding`处理元素间距,`display`决定元素的显示方式(如`block`、`inline`或`flex`)。CSS还有盒模型,包括内容、内边距、边框和外边距,理解这...
在`NickWolfe-Website-main`中,我们可以看到诸如`<html>`, `<head>`, `<title>`, `<body>`, `<header>`, `<nav>`, `<section>`, `<article>`, `<footer>`等元素的使用,这些都是构建网页的基本框架。 2. **头部...