推荐PureMVC结构
推荐目录结构(图为连连看例子的目录结构)
推荐目录结构为,按MVC分为3个目录:model、view、controller。Model下面有定义vo的子目录,view下面有定义UI界面的子目录ui等,controller下面有定义初始化的子命令目录boostraps。实际项目中的基本上每个功能模块,在三个目录下对应的类。
详解:
PureMVC框架的入口是继承Façade的子类:ApplicationFacade,startUp()方法启动初始化框架。
ApplicationFacade类: |
public class ApplicationFacadeextends Facadeimplements IFacade { private static const STARTUP:String = "startup";
public static function getInstance():ApplicationFacade { if (instance == null) instance = new ApplicationFacade(); return instance as ApplicationFacade; }
override protected functioninitializeController():void { super.initializeController(); registerCommand(STARTUP, StartupCommand); }
public functionstartUp(rootView:DisplayObjectContainer):void { sendNotification(STARTUP, rootView); removeCommand(STARTUP); //PureMVC初始化完成,注销STARUP命令 } |
1、ApplicationFacade类对象负责初始化Controller(控制器),建立Command与Notification名之间的映射。
2、ApplicationFacade类仅定义Notification(通知)常量:STARTUP(private),标识应用程序启动,其它Notification(通知)常量抽离到ApplicationConstants中定义,这样更简洁、清晰。
3、为了使ApplicationFacade结构更清晰,简洁。将注册Command、Proxy、View&Mediator的工作抽离到BootstrapCommands、BootstrapModels、BootstrapViewMediators去做。
BootstrapCommands:初始化应用程序事件与Command之间的映射关系;
BootstrapModels:Model初始化,初始化应用程序启动过程中需要用到的Proxy,并注册;
BootstrapViewMediators:View初始化,唯一创建并注册ApplicationMediator,它包含其他所有View Component并在启动时创建它们。
调用startUp()启动应用程序,发送STARTUP命令;然后触发StartupCommand,它包含三个子command执行(这里借鉴Robotlegs的思想,将Command、Model、ViewMediator初始化工作分离,使得程序结构更清晰。)
StartupCommand包含3个子命令BootstrapCommands、BootstrapModels、BootstrapViewMediators
框架初始化流程可以表示如下:
模块通信图
1、Command需要侦听通知,需要在framework.controller.boostraps.BootstrapCommands中使用registerCommand注册;
2、一般一个Mediator(handleNotification方法)处理的Notification应该在4、5个之内。如果处理的Notification很多,则意味着Mediator需要被拆分,在拆分后的子模块的Mediator里处理要比全部放在一起更好。
3、应该避免Mediator与Proxy 直接交互。可以适当是的在Mediator中facade.retrieveProxy获取Proxy然后拿到数据,而且从proxy直接拿数据,可以保证拿到最新数据。
相关知识借鉴了http://www.cnblogs.com/skynet/archive/2013/01/29/2881244.html,在此表示感谢。