1. MVC的核心思想
- 代码重用
- 关注点分离
2. 模型 - 视图 - 控制器
- 模型(Model):“数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比如:观察者模式(软件设计模式))
- 视图(View):视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
- 控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变
3. PureMVC框架
在PureMVC实现的经典MVC元设计模式中,这三部分由三个单例模式类管理,分别是Model 、View和Controller。三者合称为核心层或核心角色。PureMVC中还有另外一个单例模式类——Façade,Façade提供了与核心层通信的唯一接口,以简化开发复杂度。
从设计图中可以清楚看到,除了核心层、Façade之外,还有Mediator、Proxy、Command。
- Proxy: Model 保存对 Proxy 对象的引用,Proxy 负责操作数据模型,与远程服务通信存取数据。
- Mediator: View 保存对 Mediator 对象的引用 。由 Mediator 对象来操作具体的视图组件,包括:添加事件监听器,发送或接收 Notification ,直接改变视图组件的状态。这样做实现了把视图和控制它的逻辑分离开来。
- Command: Controller 保存所有 Command 的映射。Command 类是无状态的,只在需要时才被创建。Command可以获取 Proxy 对象并与之交互,发送 Notification,执行其他的 Command。
4. PureMVC初始化流程
PureMVC框架的入口是继承Façade的子类:ApplicationFacade。startUp()方法启动初始化框架。
ApplicationFacade类: public class ApplicationFacade extends Facade implements IFacade { private static const STARTUP:String = "startup"; public static function getInstance():ApplicationFacade { if (instance == null) instance = new ApplicationFacade(); return instance as ApplicationFacade; } override protected function initializeController():void { super.initializeController(); registerCommand(STARTUP, StartupCommand); } public function startUp(rootView:DisplayObjectContainer):void { sendNotification(STARTUP, rootView); removeCommand(STARTUP); //PureMVC初始化完成,注销STARUP命令 } }
- 此类是PureMVC应用程序的入口。ApplicationFacade 类对象负责初始化Controller(控制器),建立Command与Notification 名之间的映射
- ApplicationFacade 类仅定义Notification(通知)常量:STARTUP (private),标识应用程序启动,其它Notification(通知)常量抽离到ApplicationConstants中定义,这样更简洁、清晰。
- 为了ApplicationFacade结构更清晰,简洁。将注册Command、Proxy、View&Mediator的工作抽离到
BootstrapCommands:初始化应用程序事件与Command之间的映射关系;
BootstrapModels:Model 初始化,初始化应用程序启动过程中需要用到的Proxy,并注册;
BootstrapViewMediators:View 初始化,唯一创建并注册ApplicationMediator,它包含其他所有View Component并在启动时创建它们。
调用startUp()启动应用程序,发送STARTUP命令;然后触发StartupCommand,它包含三个子command执行(这里借鉴Robotlegs的思想,将Command、Model、ViewMediator初始化工作分离,使得程序结构更清晰。)
简而言之,框架初始化流程可以表示如下:
5. PureMVC模块间通信
当一个模块需要与其它模块交互时,可以通过发送/接收Notification或者通过façade的facade.retrieveMediator、facade.retrieveProxy检索到指定模块,然后调用相应接口。
引自:http://www.cnblogs.com/skynet/category/441705.html
参考:http://www.cnblogs.com/QLeelulu/category/123326.html
http://www.cnblogs.com/iamlilinfeng/category/454097.html