浏览 9865 次
锁定老帖子 主题:Flex PureMVC 简单分析
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-15
1结构 总的来说是把传统的MVC三层,利用Observer和Command模式进行了解耦 View、Control、Model也细化成:UI、Mediator、Command、ModelProxy、Model。另外ApplicationFacade负责配置模块之间的映射关系和初始化 2流程 蓝色箭头:表示初始化时做的注册、映射等操作 黑色箭头:表示职责 红色箭头:一个用户操作产生后的代码流程。 A 在视图和控制层之间,利用Flex自带的Event机制,通过Dispatch和Listener实现解耦。 Detail:UI为一个MXML,并对应一个Mediator,可以称为中介。UI中的组件只负责通过 click=" dispatchEvent(new Event(CREATE, true))" 的方式抛出事件。 Mediator 为UI中抛出的各个事件注册并实现监听函数。 B 在控制层和model(Service)层之间,利用PureMVC自己实现的Notification机制,发送出Notification,映射到Command执行业务代码,实现解耦。 Detail: 视图对应的Mediator接收到视图抛出的event后,进行预处理,将数据包装成Notification,调用PureMVC的Notification接口将通知发送出去,每个Notification都会通过配置,映射到Command。 Command执行过程中可以调用ModelProxy(实体代理)中的Service。ModelProxy中的Service负责与后台通信(调用后台RemoteObject或者发送HTTP Service等)并维护Model。异步返回结果会调用Command中的Result或Fault方法。此时Command可以继续发送Notification启动下一个Command。 另外一个比较关键的环节是,对于每个Notification,PureMVC不仅会映射到Command并执行,而且Mediator中也可以通过实现handleNotification接口来接收该通知并进行处理。 另外,关于项目的初始化, 过程在这里单独描述一下,因为它也是利用这个流程。 项目的Applicaiton MXML作为程序入口,需要产生一个Application Facade实例,产生的过程中ApplicationFacade会完成Notification和Command的映射,然后Application MXML发送一个“Initialize”之类的初始化Notification,通过刚完成的映射,一个初始化命令会产生并执行(InitAppCommand),在这个命令中可以进行系统初始化操作,以及完成UI和Mediator的映射。 总结: 具体的过程和以往的MVC解耦方法类似,都是通过观察者模式+命令模式,也有点像Eclipse插件开发的GEF开发。 其中Mediator作为视图的中介, 在视图和控制的解耦中起到比较关键的作用。 而且handleNotification的接口设计也很到位。根据分析的几个项目代码,直接控制UI显示的代码大部分是在这个接口中实现。 也就是将Control分成了两种,UI相关的Control(Mediator负责),和业务相关的Control(Command负责)。这样各部分职责更加清晰。 另外Mediator控制UI显示也提倡通过维护Bindable数据来实现。 至于缺点的话,有一点是很明显的, 那就是配置映射关系的代码。 这里没有贴出映射代码,但是看到这里大家应该也看出来PureMVC的流程是很依赖映射关系的 1 UI和Mediator的映射(InitAppCommand中) 2 UI抛出的Event和Mediator的监听函数映射(Mediator中) 3 Notification和Command的映射。(ApplicaitonFacade中) 这三种配置必然会随着项目的规模而膨胀。需要细心控制和维护。 另外使用Notification机制总有种兜圈子的感觉, 虽然模块划分更清晰,功能职责更细化,但一些本来简单的逻辑也会带出自己的Notification和Command,Command的粒度问题也需要考虑。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-02
对于一个UI组件我需要创建多个对象显示到页面上,每个对象只有数据源不同的这种情况,pureMVC支持起来不知道会怎么样
|
|
返回顶楼 | |
发表时间:2009-07-31
最后修改:2009-07-31
试试这个 WeeMVC 框架吧。
http://www.iteye.com/topic/320855 |
|
返回顶楼 | |