首先看看两者的区别:
MVC:Mode、View、Controller
PureMVC:MVC、Proxy、Mediator、Command、Facade
接着小心推敲各自的职责:
Model、Proxy:
Model保存对Proxy对象的引用,Proxy负责操作数据模型,与远程服务通信存取数据。(这样保证了Model层的可移植性)
View、Mediator:
View保存对Mediator对象的引用。由Mediator对象来操作具体的视图组件(例如DataGrid组件),包括:添加监听、发送或接收Notification,改变视图组件的状态。
Controller、Command:
Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。
Command可以获取Proxy对象并与之交互,发送Notification,执行其他的Command。例如应用程序的“启动”和“关闭”。
Facade:
单例,负责初始化核心层(Model、View和Controller),并能访问他们的Public方法。
(1)、负责初始化Controller,建立Command与Notification之间的映射。
(2)、执行一个Command,注册所有的Mode和View
(3)、将Mode、View和Controller对象的引用保存在自己的成员变量。
通信方式:
PureMVC通信:
不采用flash的事件响应,而是使用观察者模式来通信。
实际被我们使用的:
Notification:
Facade保存了Command与Notification之间的映射。当Notification被发出时,对应的Command会自动地由Controller执行。
Mediator:(发送、声明、接收Notification)
当用View注册Mediator时,Mediator的listNotifications方法会被调用,以数组形式返回该Mediator对象所关心的所有Notification。
之后,当系统其它角色发出同名的Notification时,关系这个通知的Mediator都会调用handleNotification方法,并将Notification以参数传递到方法。
Proxy:(发送,但不接收Notification)
例如,Proxy从服务器收到数据时,发送Notification到系统。当Proxy的数据被更新时,发送Notification到系统。
View和Controller监听Proxy发送的Notification。用户通过界面(view)与数据(Proxy)交互。
对外公布操作数据对象的API。封装了所有对数据模型的操作。
有这些命令:
SimpleCommand:
只有一个execute方法,仅接受一个Inotification实例作为参数。
MacroCommand:
可以执行多个Command。每个执行都会创建一个Command对象并传参一个对源Notification的引用。
它在构造方法中调用自身的initializeMacroCommand方法。只需要重写这个方法,调用addSubCommand添加子Command。
也可以任意组合Simple和Macro成为一个新的Command。