对PureMVC(AS3版本) 的一些想法

  在PureMVC中,为了实现更加彻底的解耦,View中使用了Mediator,model中使用了Proxy,Controler中使用了Command,他们的通信通过Notification进行。Notification会激发Command的执行,也会激发Mediator中的handleNotification方法。

 

 

  观察其源代码,在内部实现上,Controler中注册Command,实际上是在Controler中调用了View的registerObserver方法来注册观察者,传入自己的executeCommand方法作为回调函数。然后所有的notification都是传入了View的 notifyObservers方法来执行。

 

 

  Mediator这个角色,本意是将视图和控制的逻辑分开,但是个人认为其在AS项目,特别是flex项目中显得过于臃肿。在PureMVC中,Model的改变将发送Notification,使Mediator中的handleNotification方法被激发(还有人推荐先激发一个Command然后再发送Notification去激发Mediator),进而控制视图的改变。但在flex中,利用数据绑定机制,视图只需要将dataProvider绑定到Model数据源即可。数据绑定的实质就是事件,所以在不支持绑定的AS项目中,Model发送事件也能驱动视图的改变。这并不违背MCV的思想,而且少了中间的Mediator,效率更高,代码更精简。也许有人会问没有了Mediator,如何发送Notifacation,实际上,视图通过事件去激发Command也未尝不可。这种做法被另一个出名的MVC框架所运用,它的名字叫Cairngorm。

 

 

  我很赞同PureMVC中的Proxy,它负责操作数据模型,与远程服务通信存取数据,保证了Model的可移植性。请注意在PureMCV中,Proxy可以发送,但不应该接受Notifacation,但我们可以通过Command去调用它的方法。

 

 

  PureMVC是灵活的,但同时也容易被滥用和误用,比如,Mediator,Proxy都是可以通过facade获得,你可以在任意地方直接调用它们的方法,而不是通过Notifacation。这将破坏低耦合特性,让框架变成你项目的噩梦。因此,在你彻底掌握它之前,请不要轻易在你的项目中引入。最后想说的是,框架只是工具,重要的是,掌握MCV模式的设计思想。

    

posted on 2011-08-11 11:13  Dongxue.xie  阅读(1195)  评论(0编辑  收藏  举报

导航