zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    思维导图 第八章 项目质量管理
    思维导图 第七章 项目成本管理
    redis安装与配置
    思维导图 第六章 项目进度管理
    思维导图 第五章 项目范围管理
    Linux下用户-组权限配置
    意灵魔法馆首页的初步设计
    try catch自定义异常类的使用
    使用freemarker时,生成的html出现乱码
    乱码问题
  • 原文地址:https://www.cnblogs.com/raysbo/p/3047411.html
Copyright © 2011-2022 走看看