本文的目标读者是对PureMVC的ActionScript3.0 standard有相当的了解,并经常使用的人。
PureMVC的结构是非常清晰的,但是在实际使用中我们还是遇到很多需要解决的麻烦问题。简单列举几个:
1. 所有components都通过Mediator和外部组件通信,如果分配Mediator控制的components.
2. 通常程序需要加载一部分外部资源(图片、声音、swf文件等),这个功能应该如何完成。
当然除了这些问题,使用PureMVC还可能遇上许多别的问题,简单写写经验,就当抛砖引玉。
1. components和Mediator
如果仅仅是表格显示后台数据,那么很简单,一个表格就是一个component,可以对应一个Mediator或者一个Mediator控制多个components.但是普通程序的UI复杂程度远远超过表格,事实上我们甚至可以仅仅用一个StageMediator控制页面上所有可视元素,简单程序可以这么干。
Mediator的作用很简单,我们编写components,在需要的时候dispatch一些之间,Mediator负责侦听这些事件,并负责和Proxy通信。所以简单的说,Mediator就是为一些为完成同一个功能的components提供一个集合。所以有效的把components分类并分配Mediator是未来程序可读性、可扩展性的基础。
2. 加载外部资源
如果我们不使用PureMVC,当我们需要一系列资源的时候,通常会创建一个下载队列,将所需资源顺序下载(至于为什么不在本文讨论范围内),完成后进行整个程序。PureMVC中我通常创建一个LoaderProxy,顺序下载资源,完成后通知其它部件,跟通常情况一样。
但是这只是非常简单的情况,当我们的情况复杂到——我们需要顺序的下载文件,但是我们也需要当数据下载完成中间整个程序已经开始,在程序的运行中等待其它数据。
还有更复杂的情况——一些资源是互相依赖的,比如电影和字幕,电影未下载完成但是先有了字幕,这些字幕是没有意义的。
怎样在这种复杂的情况下,保持程序结构的清晰和高效就是值得研究的问题了。我所在的项目中就遇到了这么复杂的情况,既需要程序开始的同时等待下载,也有数据的依赖。我是这么解决的:
- 将数据分成多个节点,这些节点是平行关系。
- 这些节点是所有数据的基本单位。
- 节点中包含几个相互依赖的数据。
- 当一个节点完成时,通知程序开始,其它节点继续下载。
- 创建一个ValueObject对象,当节点下载完成后保存至VO。(这个VO是单例的)
- 当需要下一个节点的数据时,直接从VO获取。
这样做基本解决了上述问题。所幸的是PureMVC有一个StartupManager组件,很好的解决了这个问题,懒得自己实现的同学可以看看这个组件的使用。
回复Comments
作者:
{commentrecontent}