注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Flex 技术博客

醉里挑灯看剑,梦回吹角连营

 
 
 

日志

 
 

PureMVC框架介绍  

2008-10-30 14:57:35|  分类: PureMVC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

PureMVC框架的目标很明确,就是把程序分为低耦合的三层:ModelViewController

通过使用PureMVC后,我们的代码将集中分为以下几个部分:FaçadeCommandMediatorProxy以及UI部分,还有一些数据结构的定义如Value Object,所有核心的逻辑都在CommandMediatorProxy中。

1.      Façade:

管理着ControllerModelView,并且通过他们建立起NotificationCommand以及NotificationMediator之间的消息映射。

其中ControllerModelView都是在框架中实现,对用户来讲是不可见的。

一般一个Application都有一个Façade子类,并在系统初始化的时候进行Façade的初始化。

3个比较重要的Protected初始化函数:

initializeController() – 初始化NotificationCommand之间的映射

            registerCommand(LOGIN, LoginCommand);

initializeModel() – 初始化Model层,主要是Proxy的注册

            registerProxy(new SearchProxy());

initializeView() – 初始化View层,主要是Mediator,并Mediator指定具体的Notification Body,通常就是具体的UI view

            registerMediator(new ApplicationMediator());

通常ProxyMediator都是在收到具体Notification后第一次调用的时候进行注册,特别是Mediator,它需要一个对UI view的具体引用,在façade中无法得到

2.      Command

一般处理系统主要的Business Logic。通过Façade中的Controller注册并侦听每个Notification,当收到某个Notifiaction后,Controller会实例化一个Notification对应的Command类对象,然后调用Commandexecute()方法并将Notification作为参数传递给它。

Command包括两种SimpleCommandMacroCommand,实际上MacroCommand就比SimpleCommand多维护一个subCommands数组,在调用MacroCommandexecute方法是,会遍历该数组并按顺序调用每个commandexecute方法

Command里可能会处理以下逻辑:

A.     注册或删除MediatorProxy以及其他Command

B.     发送Notification通知其他Command或者Mediator做出响应

C.     获取ProxyMediator对象,直接操作它们

3.      Mediator

Mediator是界面UI部分和系统其他部分交互的中介。它的主要职责是处理UI和其他Mediator或者Command发出的Notification

Mediator通过2种方式监听着系统发出的消息

  1. 普通的addEventListener(eventName, onHandler)
  2. 定义感兴趣的Notification和收到Notification后的处理函数

如下代码:

override public function listNotificationInterests():Array{

      return [

            ApplicationFacade.MY_CLICK

      ];

}

           

override public function handleNotification(notification:INotification):void{

      switch(notification.getName())

      {

            case ApplicationFacade.MY_CLICK:

                  myView.text.text = notification.getBody() as String; 

                  break;

      }

}

对于在listNotificationInterests()中没有列出的Notification,该Mediator

是不会触发handleNotification处理函数的。

4.      Proxy

主要用来管理数据模型。包括远程数据调用和本地数据模型维护,一般会被CommandMediator直接调用。

Proxy的特点是它不监听Notification,因为它不关心View的状态,但是它会发送Notification

 

 

总结:

  1. Model View Controller 分离,代码结构清晰
  2. 所有代码都集中在Proxy, Mediator Command中,其中Proxy主要操纵数据模型(数据一致性和一些Service调用);Command主要涉及复杂业务逻辑处理比如系统的启动和关闭;Mediator主要涉及界面逻辑处理
  3. View页面中只有界面布局元素,没有事件处理逻辑,页面相关的代码都由相关的Mediator来处理,可以说是很纯的view
  4. 模块的耦合度很低,页面和模块之间都是通过消息Notification进行通讯,便于重用由于所有的通讯都是通过Notification进行的,各个代码之间关联度比较低,这也带来了负面的影响,代码的可读性和跟踪方便性比较低,在修改和查找bug的过程中会比较费时。
  评论这张
 
阅读(2235)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017