惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
量子位
IT之家
IT之家
Jina AI
Jina AI
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
AWS News Blog
AWS News Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
P
Proofpoint News Feed
S
Schneier on Security
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
L
LINUX DO - 热门话题
博客园 - 聂微东
C
Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
Security Latest
Security Latest
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
Last Week in AI
Last Week in AI
博客园 - Franky
G
GRAHAM CLULEY
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
L
LINUX DO - 最新话题
T
The Exploit Database - CXSecurity.com
博客园 - 三生石上(FineUI控件)
P
Privacy International News Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
Schneier on Security
Schneier on Security
V
V2EX
V
Visual Studio Blog
S
Security @ Cisco Blogs
博客园 - 叶小钗
H
Hacker News: Front Page
小众软件
小众软件
WordPress大学
WordPress大学
V2EX - 技术
V2EX - 技术
美团技术团队

博客园 - raysbo

认知决定上限 多线程 LINQ Free download MVP 架构 - 成功法宝 书籍汇总 架构 - 如何成为优秀的架构师 DB - 并发控制 MVVM - 基础介绍 知识点 - 网址收集 优化 - 优化网站设计 SAP - 学习网站汇总 HTML5 - 学习网站收集 HTML5 - 新增标签 HTML5 - 概要认识 SQLSERVER - Index ORACLE - 简介及安装 IoC容器 - Spring.NET
MVC - PureMVC
raysbo · 2013-04-27 · via 博客园 - raysbo

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