`
presses
  • 浏览: 119460 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

对PureMvc的一些印像

    博客分类:
  • flex
阅读更多

       学习了一下PureMVC,写了笔记:读书笔记:puremvc framework implementation idioms and……。以下是对PureMVC的一些印像:

 

优点:
一、模式用得多,看文档的过程感觉就像把23种基本模式复习了一次。[用了多少模式,具体没数过。但23种模式中,也用得七七八八了]。所以就算学了PureMVC后不使用也不浪费学习时间。

 

二、解耦,整个系统都由中间层及Notification机制解耦了。[是否解耦得太过份了?]

 

 

缺点:
1、角色(类形)太多,角色间关系复杂(一对多,多对多)。

 

 

2、过份依赖观察者模式、配置零散、不方便维护及调试:

一、PureMvc推崇的是解耦,但解耦直接的结果就是单靠IDE(ctrl+点击)根本找不到代码调用的路线。代码每到一处就是发送一个Notification。然后调用路线就断了。要继线就要找配置。看了官方的demo(appskeleton),配置的地方是分散的。Command在facade中的配置,Mediator中对notification的配置、Proxy……。

 

 

二、别人可能说,UI本来就是事件模型。调用关系本来就没有服务端明确。其实这个不一定。如果把事件限制在一些特定层中,调用关系还是很明确的。

 

 

3、需要编写的额外代码烦多。

 

 

4、不提供额外功能。
Spring提供声名式事务支持。Hibernate简化持久层操作。PureMVC提供什么额外功能?

 

 

以下是我对框架中一些角色的理解:

 

一、Mediator的角色我基本认同。它把mxml元素布局与as逻辑分开。但对Mediator中的Notification的映射我觉得这些是多余代码。而switch结构用在这里,我觉得也不优美。另外在调用proxy时,先从facade获取obj,再转形为实现类,转了一大圈回到了原点,显得多余。而这种转化与Spring的工厂也没有可比性。

 

 

二、Proxy的角色我也免强认同。Proxy的作用类似于服务端的“瘦模型”。Model只用作数据容器,Proxy处理域逻辑。“瘦模型”用在客户端。其实也可以。但在proxy发送notification。我反对,我上面说过,事件(观察者模式)用在特定层可以接受,但事件惯穿业务层、惯穿整个系统。我反对。

 

 

三、Command的角色我也认同。其实就是业务层,没什么可说的。

 

 

四、facade的角色我不认同。反正代码最后import的都是实现类。这个facade不多余吗?

 

 

五、Notification这个角色我不认同。as已内置事件模式,没必要自已增加一个观察者模块。另外notification的用法,我也不认同。

 

 

总结:PureMVC的作用很大程度上是解耦。但我对这种解耦程度很有疑问。它带来的好处与它带来的缺点比例多大?

 

最后虽然我对PureMVC持反对态度,但存在即合理,而且有这么多人支持。PureMVC也肯定有他的过人之处。希望有PureMVC实践经验的出来指导指导。

分享到:
评论
14 楼 presses 2009-10-12  
对于UI层,个人有几个观点:

一、这一层既然选择了动态语言,从某角度说明在这一层中我们更需要的是灵活。没必要引入mvc框架把自已套死。

二、一方面mvc框架是不需要的,但另一方面mvc模式还是要有。基本的表现层、业务层、通迅层、域对像层可以按项目规模适度分开。而统一分包及命名更是必不可少。

另外,PM我没做过,但小系统还是设计过几个,经典的是用储存过程写工作流引擎,经过几个版本的迭代到最后的维护也不难,更没有哭过。

所以我建议大家在UI层不要用MVC框架,取而代之的是根据项目规模,团队状况对UI层进行适当的分层和做好编码约束。
13 楼 atsmile 2009-10-12  
以PM的角度,PUREMVC是一个很不错的选择。

flex开发不使用框架,等着维护的时候哭吧。。。如此自由的语言,没有框架的约束,代码的可读性急剧下降,维护的成本急剧上升。

目前只用过2个框架,另一个是烟水晶那东东。两害相权取其轻,个人觉得puremvc更好用一些。

至今已使用该框架近2年了吧。目前依然在用,在多个项目,不同环境下用过,感觉依然很好。强烈推荐各位使用。
12 楼 gavin 2009-08-25  
我觉得PureMvc也是概念太多,实际用起来比较麻烦。就为了解耦,把逻辑分开,有点过。它又不是强制性的,程序用了PureMvc不一定是解耦的,复杂很容易用错。做Flex有组件的概念,也是MVC的,把组件概念用好就已经不错了。如果纯用actionscript开发,有个PureMvc这样的东西还是不错的。还是要根据项目选择,适合的才是好的。

http://raptureinvenice.blogspot.com/2008/08/why-and-how-i-switched-from-puremvc-to.html(要翻墙)
11 楼 timshaw9791 2009-08-24  
presses 写道
本质上Notification只是一个简单类,Notifaction能做的,Event同样能做。

例如你说到的权限、log等切面功能,你可以写一个继承自Event的子类CustomEvent,然后系统中用到的自定义的Event都统一继承CustomEvent。

我这里强调的是在系统中引入Notification这个概念后,增加了系统的复杂性、增加了学习成本。但它究竟带来了什么好处?


我觉得Notification加的挺好的很有必要,诚如你所说,notification就是个简单类,但event可不简单!用event来做notification正式你所说的增加复杂性。

咱就不说可移植性的问题了,胡乱找个借口吧:名字真的很重要,因为望文生义是我们的本能,我们要可读性。名字起的不好会让我们晕头的,如果同是event,多少会造成混乱的,你不混乱新手也是会混乱的。
flex的event机制,要求handler和target要碰面,所谓target.addEventListener(eventType,handler),没有解耦这两者,这在模块内部使用还没啥问题,一旦要求跨模块就不现实了,Notification机制中发送消息的对象Notifor和处理消息的Command是互相不知道彼此的,这从Notification这个词的本意也能体会出来。所以我说event和Notification是两个层次的东西。当然你可以说用event转手一次转到消息队列再处理来实现,但是明显有区别的东西,你为什么不用一个新的东西来标志他呢?非要继承event里的那一大坨一会儿currentTarget一会儿target一会儿preventDefault还能stopImmediate这不纯属误导人嘛。

10 楼 presses 2009-08-24  
本质上Notification只是一个简单类,Notifaction能做的,Event同样能做。

例如你说到的权限、log等切面功能,你可以写一个继承自Event的子类CustomEvent,然后系统中用到的自定义的Event都统一继承CustomEvent。

我这里强调的是在系统中引入Notification这个概念后,增加了系统的复杂性、增加了学习成本。但它究竟带来了什么好处?
9 楼 timshaw9791 2009-08-24  
presses 写道
lydawen 写道
PureMVC并不只针对actionscript(flex),它针对好多种不同的语言。
现在参与的一个项目,做了应用算是比较大,思维也从b/s转为c/s思考模式,但最开始由于嫌麻烦,没使用框架。
到现在应用做大了,感觉还是需要框架。。。像现在一个mxml里,as代码就差不多达到1000行以上[不要说这是我们设计问题,我觉得没太大必要将as单独成as文件再import或include,vo除外]


我相信:越通用,越不实用。PureMVC文档中说到由于PureMVC设计不针对AS,所以没用AS内置的事件模型。这不是为了通用性而增加学习成本吗?

mxml与as混在一起。这不是框架问题。是基本的面向对像问题。


notification和event还是要做区分的,
1.MVC需要notifcation的概念,有了他MVC在概念上就完备了。
2.有了notificaiton的概念,那么能不能用event来实现呢?实现上flash的event会有些限制的,如没办法对所有的event的调用做通用处理如log甚至权限校验等等,
总之,event的目标和notification不匹配,没办法直接用event。
flash的event和notification是两个层次的东西,event我觉得最好还是用在mxml和Mediator之间,超出这个范围,到了MVC的势力范围,显然应该用Notificaiton。

8 楼 timshaw9791 2009-08-24  
lydawen 写道
PureMVC并不只针对actionscript(flex),它针对好多种不同的语言。
现在参与的一个项目,做了应用算是比较大,思维也从b/s转为c/s思考模式,但最开始由于嫌麻烦,没使用框架。
到现在应用做大了,感觉还是需要框架。。。像现在一个mxml里,as代码就差不多达到1000行以上[不要说这是我们设计问题,我觉得没太大必要将as单独成as文件再import或include,vo除外]

mxml这么大.没见过.出来的swf有多大?
7 楼 timshaw9791 2009-08-24  
<div class="quote_title">presses 写道</div>
<div class="quote_div">
<p><span><span style="font-size: 12px; font-family: Verdana;">       学习了一下PureMVC,写了笔记:<a title="读书笔记:puremvc framework implementation idioms and……" href="/blog/401626" target="_blank">读书笔记:puremvc framework implementation idioms and……</a>。以下是对PureMVC的一些印像:</span></span></p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">优点:<br>一、模式用得多,看文档的过程感觉就像把23种基本模式复习了一次。[用了多少模式,具体没数过。但23种模式中,也用得七七八八了]。所以就算学了PureMVC后不使用也不浪费学习时间。</span></span></p>
<p>--------&gt;所以我觉得PureMVC是在用模式跟我们讨论,已超越了代码这一层次,这已是他的初衷,作者始终认为MVC是UI开发的最终要义。</p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">二、解耦,整个系统都由中间层及Notification机制解耦了。[是否解耦得太过份了?]</span></span></p>
<p>--------&gt;portable啊,和flex中的event有所区别,也更清楚的展现了PureMVC的中心思想,MVC是不分语言的UI普世价值。</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">缺点:<br>1、角色(类形)太多,角色间关系复杂(一对多,多对多)。</span></span></p>
<p>---------&gt;还多啊?PureMVC一个图就能展现所有的东西,还叫多?看看他的源代码,那叫一个精炼,有那个框架敢像pureMVC那样说基本上不用在更新什么?!</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">2、过份依赖观察者模式、配置零散、不方便维护及调试:<br></span></span></p>
<p><span><span style="font-size: 12px; font-family: Verdana;">一、PureMvc推崇的是解耦,但解耦直接的结果就是单靠IDE(ctrl+点击)根本找不到代码调用的路线。代码每到一处就是发送一个Notification。然后调用路线就断了。要继线就要找配置。看了官方的demo(appskeleton),配置的地方是分散的。Command在facade中的配置,Mediator中对notification的配置、Proxy……。</span></span></p>
<p>---------&gt;ctl+点击....咩框架最中你意。。。spring,struts,hibernate都可以回家吃饭嘞</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">二、别人可能说,UI本来就是事件模型。调用关系本来就没有服务端明确。其实这个不一定。如果把事件限制在一些特定层中,调用关系还是很明确的。</span></span></p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">3、需要编写的额外代码烦多。</span></span></p>
<p>--------&gt;代码生成,你是不是觉得你需要写一些雷同的代码?</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">4、不提供额外功能。<br>Spring提供声名式事务支持。Hibernate简化持久层操作。PureMVC提供什么额外功能?</span></span></p>
<p>--------&gt;把咱们本来看到UI就懵了的大脑组织起来,这根本就超越了提供额外功能的层次,授人以渔。</p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">以下是我对框架中一些角色的理解:</span></span></p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">一、Mediator的角色我基本认同。它把mxml元素布局与as逻辑分开。但对Mediator中的Notification的映射我觉得这些是多余代码。而switch结构用在这里,我觉得也不优美。另外在调用proxy时,先从facade获取obj,再转形为实现类,转了一大圈回到了原点,显得多余。而这种转化与Spring的工厂也没有可比性。</span></span></p>
<p>---------&gt;Mediator角色我觉得是PureMVC的第一重要角色,我们平时老是容易忽略它而造成不可收拾的后果。Notification当然要到这里了,总不能直达UI吧?也不可能只到Command吧?如果你认为Notification只能到Command,那你对Command和Mediator没有很好的理解。facade在这里解耦啊,多好的功能。</p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">二、Proxy的角色我也免强认同。Proxy的作用类似于服务端的“瘦模型”。Model只用作数据容器,Proxy处理域逻辑。“瘦模型”用在客户端。其实也可以。但在proxy发送notification。我反对,我上面说过,事件(观察者模式)用在特定层可以接受,但事件惯穿业务层、惯穿整个系统。我反对。</span></span></p>
<p>---------&gt;这就是Notification和flex的Event的分野所在了,如果你把event用到了proxy,那才叫难以接受,之所以要另起一个Notification的东东,是语义上的需要。</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">三、Command的角色我也认同。其实就是业务层,没什么可说的。</span></span></p>
<p>---------&gt; Command不是业务层。MVC的C啊联系M和V的。</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">四、facade的角色我不认同。反正代码最后import的都是实现类。这个facade不多余吗?</span></span></p>
<p>---------&gt; 解耦啊,M,V,C 就靠这个facade来粘合了,你说重要不重要</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">五、Notification这个角色我不认同。as已内置事件模式,没必要自已增加一个观察者模块。另外notification的用法,我也不认同。</span></span></p>
<p>---------&gt;奇怪很多人质疑这个Notification,虽然as内置事件模型,但是我觉得幸好PureMVC没直接使用event,这个区分真的很好。</p>
<p> </p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">总结:PureMVC的作用很大程度上是解耦。但我对这种解耦程度很有疑问。它带来的好处与它带来的缺点比例多大?</span></span></p>
<p> </p>
<p><span><span style="font-size: 12px; font-family: Verdana;">最后虽然我对PureMVC持反对态度,但存在即合理,而且有这么多人支持。PureMVC也肯定有他的过人之处。希望有PureMVC实践经验的出来指导指导。</span></span></p>
<p>---------&gt;</p>
<p>我觉得PureMVC是我见过最纯粹的一个框架(未避免口水加个“之一”吧):只做一件事情而且尽力做到最好。</p>
</div>
<p> </p>
6 楼 ibio 2009-07-31  
为什么不试试 WeeMVC?
WeeMVC 是一种微型、简洁的ActionScript?快速开发框架
http://www.iteye.com/topic/320855
5 楼 presses 2009-06-11  
第一:框架硬性规定了mxml与as分开?通过接口还是什么手段?别告诉我是框架文档中的建议。

第二:我觉得“封装”与“责任分离”是面向对像比较重要的特性和原则。ML语言的责任是处理图形布局,脚本的责任是处理逻辑。这些在大部份的UI中都有说明,例如:html与js,mxml与as,android中的xml与java。

反正就是一句话:面向对像基础好,不用框架,一样可以开发出好系统。面向对像基础不好,用PureMVC不会起到改善代码的质量。重要的是,面向对像基础不好,而又用了PureMVC,会得到反效果。
4 楼 lydawen 2009-06-11  
presses 写道
lydawen 写道
PureMVC并不只针对actionscript(flex),它针对好多种不同的语言。
现在参与的一个项目,做了应用算是比较大,思维也从b/s转为c/s思考模式,但最开始由于嫌麻烦,没使用框架。
到现在应用做大了,感觉还是需要框架。。。像现在一个mxml里,as代码就差不多达到1000行以上[不要说这是我们设计问题,我觉得没太大必要将as单独成as文件再import或include,vo除外]


我相信:越通用,越不实用。PureMVC文档中说到由于PureMVC设计不针对AS,所以没用AS内置的事件模型。这不是为了通用性而增加学习成本吗?

mxml与as混在一起。这不是框架问题。是基本的面向对像问题。


这点我不同意,个人认为这与面向对象没半点关系!如果不使用框架,就从页面上取数据或者控制页面上组件的动作,数据填充,view切换,这有必要将as和mxml分开吗?而这就是框架要解决的问题。当然我们里面大量vo是有独立的包以及类的,如果连这都不分那就太菜了
3 楼 presses 2009-06-04  
lydawen 写道
PureMVC并不只针对actionscript(flex),它针对好多种不同的语言。
现在参与的一个项目,做了应用算是比较大,思维也从b/s转为c/s思考模式,但最开始由于嫌麻烦,没使用框架。
到现在应用做大了,感觉还是需要框架。。。像现在一个mxml里,as代码就差不多达到1000行以上[不要说这是我们设计问题,我觉得没太大必要将as单独成as文件再import或include,vo除外]


我相信:越通用,越不实用。PureMVC文档中说到由于PureMVC设计不针对AS,所以没用AS内置的事件模型。这不是为了通用性而增加学习成本吗?

mxml与as混在一起。这不是框架问题。是基本的面向对像问题。
2 楼 ltian 2009-06-04  
PureMVC华而不实,过犹不及,谁用谁后悔。等着消息乱发而不知道来源,导致代码胡乱执行的时候就知道什么是痛苦了。
1 楼 lydawen 2009-06-04  
PureMVC并不只针对actionscript(flex),它针对好多种不同的语言。
现在参与的一个项目,做了应用算是比较大,思维也从b/s转为c/s思考模式,但最开始由于嫌麻烦,没使用框架。
到现在应用做大了,感觉还是需要框架。。。像现在一个mxml里,as代码就差不多达到1000行以上[不要说这是我们设计问题,我觉得没太大必要将as单独成as文件再import或include,vo除外]

相关推荐

    PureMVC 中文版

    标题 "PureMVC 中文版" 指的是 PureMVC 框架的一个中文版本,这是一款广泛应用的开源框架,特别设计用于构建富互联网应用程序(RIA),尤其是基于Adobe Flex和ActionScript 3的项目。PureMVC 提供了一种模块化、结构...

    可以运行的puremvc的登陆实例.

    标题中的“可以运行的PureMVC的登陆实例”是指一个基于PureMVC框架的登录功能实现,这个实例已经经过验证可以在FlexBuilder3环境下正常运行。PureMVC是一种经典的多层应用架构模式,它为ActionScript、JavaScript、...

    Lua实现PureMVC

    若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC中的 class(ClassName, BaseName) 函数并不提供,因为此框架本意就是为了用于cocos2d-x-lua中。

    PureMVC.rar

    在PureMVC中,模型由`Proxy`类表示,它们存储和处理数据,同时提供对数据的访问接口。当数据发生变化时,Proxy会通过`Notification`通知控制器。 2. **视图(View)**:视图层负责展示用户界面和管理界面组件。Pure...

    PureMVC总结(附Hello World含PureMVC源码代码和文档)

    7. **源码分析**:可能对PureMVC的源码进行解析,帮助理解其内部机制和设计理念。 8. **文档阅读指南**:如何理解和使用提供的PureMVC官方文档,以获取更多关于框架的信息。 通过学习PureMVC,开发者可以获得一种...

    qt版本pureMVC

    在Qt环境中,PureMVC提供了对C++语言的支持,使得开发者可以利用其强大的功能和面向对象的特性,同时利用PureMVC的组织结构。这个版本的PureMVC允许开发者更专注于业务逻辑,而不是关注如何把各个组件绑定在一起。 ...

    Unity 专用 pureMVC

    同时,由于PureMVC框架的轻量级特性,对性能的影响较小,适合各种规模的游戏项目。通过理解并熟练运用PureMVC的各个组成部分,开发者可以更高效地组织代码,实现UI和逻辑的分离,从而专注于创造引人入胜的游戏体验。...

    pureMVC_AS3

    **纯MVC(PureMVC)AS3版详解** PureMVC是一款轻量级的框架,主要用于实现Model-View-Controller(MVC)设计模式。它最初由Dan Varga创建,旨在提供一种跨平台的解决方案,使开发人员能够更有效地组织和管理应用...

    PureMVC_CSharp.zip_csharp_pureMVC_pureMVC C_pureMVC C#_疯铮铮

    "表示这不仅仅是一个概念介绍,还提供了实际的代码示例,学习者可以直接查看和运行这些源代码,加深对PureMVC的理解。 标签进一步细化了主题,"csharp"指明是C#语言相关,"puremvc"是框架的名字,"puremvc_c"和...

    PureMvc实例 PureMvc第一个实例

    PureMvc是一个开源的、轻量级的框架,用于构建多层结构的富客户端应用程序。它遵循Model-View-Controller(MVC)设计模式,并提供了一种...记住,实践是最好的老师,尝试修改和扩展这个例子,以加深对PureMvc的理解。

    基于PureMVC框架实现的Qt的一个例子

    **PureMVC框架详解** PureMVC是一种轻量级、模型-视图-控制器(MVC)框架,最初是为ActionScript开发的,后来被移植到多种编程语言中...此外,还可以尝试扩展这个例子,添加更多功能,以加深对PureMVC和Qt集成的理解。

    PureMVC C#框架

    在PureMVC中,模型由`IProxy`接口实现的类组成,它们提供了对数据的访问和管理。模型对象通常不直接与视图或控制器交互,而是通过发布通知(Notifications)来传递数据变化。 2. **视图(View)**:视图层负责展示...

    PureMVC五子棋游戏源码,学习PureMVC

    《深入理解PureMVC:基于五子棋游戏的源码分析》 PureMVC是一个流行的、开源的、轻量级的、跨平台的MVC框架,它为开发人员提供了一种结构化的编程模式,用于组织和管理应用程序的业务逻辑、用户界面和数据。在这个...

    PureMVC中文教程

    在描述中提到了一个博客链接,虽然具体内容未给出,但可以推测这篇博客可能提供了额外的学习资源或者对PureMVC的深入解读。iteye是中国知名的技术社区,博客作者通常会分享自己的编程经验和心得,这对于理解PureMVC...

    PureMVC_study

    【PureMVC学习指南】 PureMVC是一款轻量级的框架,主要应用于Flex和AS3开发,它基于...PureMVC_Study这个压缩包文件可能是对PureMVC框架的实例演示或者学习资料,可以帮助开发者进一步了解和掌握PureMVC的使用方法。

    pureMVC源代码

    纯MVC(PureMVC)是一个轻量级的框架,用于构建基于模型-视图-控制器(Model-View-Controller)设计模式的应用程序。这个框架最初是为ActionScript编程语言设计的,但后来被移植到了多种其他编程语言中,包括Java、...

    puremvc开发指南

    以下是 PureMvc 的一些关键知识点: 1. **核心组件**:PureMVC 包含了四个主要组件:Model(模型)、View(视图)、Controller(控制器)和 Proxy(代理)。它们共同协作以实现松耦合的架构。 - **Model**:负责...

    PureMVC.zip

    在Unity中,PureMVC提供了对游戏逻辑的高效管理,使得开发者可以专注于游戏业务逻辑而不是底层架构。通过使用PureMVC,开发者可以创建出更清晰、更易于扩展和维护的游戏项目。 在压缩包中的“PureMVC”文件可能包含...

    一个很好的puremvc实例

    标题中的“一个很好的puremvc实例”表明我们即将探讨的是关于PureMVC框架的实际应用案例。PureMVC是一个轻量级的、跨平台的MVC(Model-View-Controller)设计模式实现,它主要应用于创建复杂但组织良好的应用程序...

    PureMVC C++架构代码

    PureMVC是一个多范式、轻量级的框架,它主要设计用于构建应用程序的模型-视图-控制器(MVC)结构。这个框架的核心理念是将应用程序的不同部分解耦,以便于开发、维护和扩展。在C++版本的PureMVC中,它充分利用了面向...

Global site tag (gtag.js) - Google Analytics