MVC PureMVC

1. MVC的核心思想

  • 代码重用
  • 关注点分离

2. 模型 - 视图 - 控制器

  • 模型(Model):“数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。(比如:观察者模式(软件设计模式))
  • 视图(View):视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
  • 控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变

3. PureMVC框架
  
PureMVC实现的经典MVC元设计模式中,这三部分由三个单例模式类管理,分别是Model ViewController。三者合称为核心层核心角色PureMVC中还有另外一个单例模式类——FaçadeFaçade提供了与核心层通信的唯一接口,以简化开发复杂度
  clip_image008
从设计图中可以清楚看到,除了核心层、Façade之外,还有MediatorProxyCommand

  • 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(控制器),建立CommandNotification 名之间的映射
  • ApplicationFacade 类仅定义Notification(通知)常量:STARTUP private),标识应用程序启动,其它Notification(通知)常量抽离到ApplicationConstants中定义,这样更简洁、清晰。
  • 为了ApplicationFacade结构更清晰,简洁。将注册CommandProxyView&Mediator的工作抽离到
    BootstrapCommands:初始化应用程序事件与Command之间的映射关系;
    BootstrapModelsModel 初始化,初始化应用程序启动过程中需要用到的Proxy,并注册;
    BootstrapViewMediatorsView 初始化,唯一创建并注册ApplicationMediator,它包含其他所有View Component并在启动时创建它们。


调用startUp()启动应用程序,发送STARTUP命令;然后触发StartupCommand,它包含三个子command执行(这里借鉴Robotlegs的思想,将CommandModelViewMediator初始化工作分离,使得程序结构更清晰。)
简而言之,框架初始化流程可以表示如下:
clip_image006

5. PureMVC模块间通信
  
当一个模块需要与其它模块交互时,可以通过发送/接收Notification或者通过façadefacade.retrieveMediatorfacade.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

原文地址:https://www.cnblogs.com/raysbo/p/3047411.html