`
taomujian
  • 浏览: 110879 次
  • 性别: Icon_minigender_1
  • 来自: 安徽-合肥
社区版块
存档分类
最新评论

PureMVC 架构流程

    博客分类:
  • FLEX
阅读更多

PureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和Controller。

· 在PureMVC实现的经典MVC元设计模式中,这三部分由三个单例模式类管理,分别是Model、View和  
Controller。三者合称为核心层或核心角色。

· PureMVC中还有另外一个单例模式类——Façade,Façade提供了与核心层通信的唯一接口,以简化开发
复杂度。

我们首先来看下面这一张图:


在这张图中能够清晰的看到pureMVC分为四个主要的部分,
1.首先来看下Façade类应用单例模式,它负责初始化核心层(Model,View和Controller),并能访问它们的Public方法

2.View 与 Mediator
View保存对Mediator对象的引用 。由Mediator对象来操作具体的视图组件,包括:添加事件监听器 ,发送或接Notification ,直接改变视图组件的状态。这样做实现了把视图和控制它的逻辑分离开来。这样在FLEX的视图组件中我们将更关注视图的布局自身事件的简单处理

3.Model 与 Proxy
Model保存对Proxy对象的引用,Proxy负责操作数据模型(Value Object),与远程服务通信存取数据。 这样保证了Model层的可移植性。

4.Controller 与 Command
Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。 Command可以获取Proxy对象并与之交互,发送Notification,执行其他的Command。经常用于复杂的或系统范围的操作,如应用程序的“启动”和“关闭”,负责获取Mediator发出的通知调用prox类获取数据等等。应用程序的业务逻辑应该在这里实现。

5.此外你还需要对pureMVC的通信机制有所了解。
PureMVC的通信并不采用Flash的EventDispatcher/Event,因为PureMVC可能运行在没有Flash Event和EventDispatcher类的环境中,它的通信是使用观察者模式以一种松耦合的方式来实现的。你只需要使用一个非常简单的方法从Proxy, Mediator, Command和Facade发送Notification,由于pureMVC的通信采用弱类型,因此你可以不用像使用FLEX派发事件那样针对不同的事件编写不同的事件类(指需要在派发事件同时传递参数的情况)

6.pureMVC中各层次通信规则
Proxies,Mediators与Commands类之间的通讯是通过广播Notifications来实现松耦合和跨平台特性的
    ○ Notification可以被用来触发Command的执行
    ○ Mediator发送、声明、接收Notification
    ○ Proxy发送,但不接收Notification

有关更详细的请查阅“PureMVC_Implementation_Idioms_and_Best_Practices_cn.pdf”(中文版)

对pureMVC有了大概的认识后我们再来看这张架构流程图:



我们以一个程序的启动过程来对这张图进行一个简单的描述:

1.首先找到蓝色的“ApplicationFacade”,该类应当是一个继承自facade的自定义类,facade采用了单例模式,他的主要功能就是负责启动系统程序(facade类中有个startup负责此项功能)以及注册Mediator和Command和Proxy类,并且pureMVC中的每个Mediator和Command和Proxy都具有获取facade引用的方法。
在这里ApplicationFacade先是注册一个通知名称到指定的Command类上(registered Command),然后从主MXML文件中启动程序时会第一次初始化ApplicationFacade类并调用startup方法来来派发一个启动程序的通知(Notification)

2.所有的通知都由“pureMVC Notification System”这个模块来管理,“pureMVC Notification System”获取到第一步派发的启动通知后,就会根据先前注册的Command类的名称去创建对应的Command类对象

3.现在Command类已经被创建了(看蓝色的“Command”),在Command中我们会获取ApplicationFacade类的引用去注册页面UI对应的Mediator和获取数据用的Proxy。接下来你可以先去获取系统首页显示需要的数据,这时我们在Command类中通过ApplicationFacade去获取之前注册Proxy类,然后访问Proxy中的获取数据的方法,此时程序执行到“Model Proxy”模块

4.现在来到“Model Proxy”模块,在这里我们从调用server端获取想要的数据后将数据返回给Command模块(注:在Proxy中是可以直接发送通知,告知数据获取成功并将数据做为报体发送出去)

5.再次的回到Command模块,当成功的获取到数据后我们派发一个成功获取数据的通知,并将数据作为报体送出

6.在第三步中提到去注册一个Mediator,Mediator类会保存一个页面UI的引用,在Mediator类中提供了一个用于告诉系统这个类关心哪些通知的方法(listNotificationInterests)以及处理捕获通知的方法(handleNotification),我们在Mediator类中需要关心的是第5步中送出的通知。由于第五步已经派发出了成功获取数据的通知,我们在handleNotification方法中将会捕获该通知,那么在捕获到该通知后我们做什么呢?

7.现在看“UI Mediator 模块”,由于Mediator类主要是用来协调页面UI组件的所以在我们捕获到成功获取数据的通知后,我们在这里更新页面UI组件的数据源,例如在Mediator中我们保存了一个组件的引用,该组件利用DataGrid来显示数据(通常是引用一个自定义组件或者一个简单的页面),在这里我们就可以使用UI.DataGrid.dataPrivate = ArrayCollection,的方法来更新数据源。(注:这里主要是为了方便,通常我们不建议在Mediator中直接调用组件中的属性,这样可以降低页面UI和Mediator的耦合,以不至于没更新一次UI就要更新一次Mediator,对于这种情况你可以在MXML文件中的<mx:Script>标签中定义一个用于保存数据源的对象,这样当换成别的UI组件来显示数据时就只要更新MXML文件即可。当然如果整个组件都换的变换的那就无能为力了)。

8.至此程序已经启动完毕


二 与用户的交互

当用户在UI上点击了一个按钮需要切换显示页面时pureMVC是怎么工作的呢?
1.在页面UI内部我们对该按钮进行监听,然后在用户点击按钮的时候派发出切换页面的FLEX事件
 通常我们是在UI内部定义一个事件常量,然后在该UI的协调类Mediator中监听事件名称为在UI中定义的常量
 例如:MXML文件(Simple)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
    <![CDATA[
        public static const MY_CLICK:String ="myClick";//FLEX事件名称
        
        private function onClick():void{
            this.dispatchEvent(new Event(MY_CLICK));
        }
    ]]>
</mx:Script>
    <mx:Button click="onClick()"/>
</mx:Application>

Mediator类:
UI引用.addEventListener(Simple.MY_CLICK,onClick);

Private function onClick(evt:Event):void{
    ...
}

2.当Mediator捕获到FLEX Event后,就可以进行其他的处理了,在这里我们移走不需要显示的UI,将需要显示的UI添加到显示页面中,同时派发一个pureMVC的通知,通知我们需要注册一个显示页面(报体为新添加显示的UI对象)的Mediator类,并且需要更新数据(假设Command已经注册)。

3.通知派发后就由“pureMVC Notification System”模块来处理通知,将通知分配给注册的Command,接着后面的过程也就和前面说的一样了

OK,希望能对大家有点用,有不对的地方还请指正。

分享到:
评论
4 楼 wx886104 2010-05-11  
谢谢,使我很好的了解puremvc的架构流程
3 楼 jssy 2009-06-04  
完成了论坛发帖测验,再来感谢一下,谢谢!
2 楼 273289658 2009-02-18  
不错  学习了
1 楼 NewTamato 2009-02-02  
说得好 

相关推荐

    可以运行的puremvc的登陆实例.

    PureMVC是一种经典的多层应用架构模式,它为ActionScript、JavaScript、Swift等语言提供了一个可复用的框架,用于构建松耦合、模块化的应用程序。 PureMVC的核心概念包括三个主要角色:模型(Model)、视图(View)...

    PureMvc实例 PureMvc第一个实例

    首先,让我们深入了解一下PureMvc的MVC架构: 1. **模型(Model)**:在PureMvc中,模型层负责处理应用程序的数据和业务逻辑。它由一系列`Proxy`类组成,这些类封装了与数据源的交互,可以是本地存储或远程服务。`...

    PureMVC总结(附Hello World含PureMVC源码代码和文档)

    4. **模块化设计**:PureMVC支持多模块架构,如何创建和管理多个独立的MVC子系统。 5. **应用场景与最佳实践**:PureMVC在实际项目中的使用场景,以及如何优化和扩展框架。 6. **Hello World示例**:通常会通过一...

    PureMVC中文教程

    2. **PureMVC架构**:详细介绍PureMVC的四个核心组成部分:Model(模型)、View(视图)、Controller(控制器)以及MacroCommand、Mediator、Proxy、Notification等核心类的角色和职责。 3. **核心组件**:深入解析...

    PureMVC流程

    ### PureMVC流程详解 #### 一、概述 PureMVC是一种开源的、跨平台的框架,用于构建灵活且可维护的应用程序结构。它通过实现一种标准的模型-视图-控制器(MVC)设计模式,帮助开发者组织代码并简化应用开发流程。...

    pureMVC_AS3

    1. **MacroCommand**:宏命令是PureMVC的一个扩展,它允许将多个命令组合在一起,作为一个单一的命令执行,使得处理复杂流程变得更加简单。 2. **SimpleCommand**:简单命令是处理单个任务的命令,它接收通知,执行...

    Unity 专用 pureMVC

    PureMVC是面向对象的多层应用程序框架,它提供了一种模式来组织代码,使开发更加规范和高效。本篇文章将深入探讨Unity中如何使用PureMVC框架,以及它如何帮助实现UI和逻辑的分离。 PureMVC是一个轻量级的框架,其...

    PureMVC的例子

    1. **PureMVC架构**:了解PureMVC的核心组件,包括Model(模型)、View(视图)和Controller(控制器),以及Mediator(中介者)、Proxy(代理)、Command(命令)等辅助角色。 2. **Flex编程**:使用Flex Builder...

    一个很好的puremvc实例

    PureMVC是一个轻量级的、跨平台的MVC(Model-View-Controller)设计模式实现,它主要应用于创建复杂但组织良好的应用程序架构。在这个实例中,开发者可能已经展示如何在ActionScript或Flex环境中有效地使用PureMVC。...

    PureMVC框架实例

    PureMVC架构 PureMVC将MVC模式进一步抽象为四个核心组件:模型(Model)、视图(View)、控制器(Controller)和多态观察者(Proxy、Command、MacroCommand、Mediator、Notifier)。 - **多态观察者(Multiton)*...

    PureMVC简单例子

    1. **初始化**:首先,通过`Facade`实例化整个PureMVC架构,注册`Model`、`View`和`Controller`的核心组件。 2. **创建Proxy**:定义一个`Proxy`子类,用于管理特定的数据或服务。注册这个`Proxy`到`Facade`,以便...

    PureMVC登陆例子

    在这个"PureMVC登录例子"中,我们可能会看到以下架构: 1. **Proxy**:通常包含用户认证所需的业务逻辑和数据。在这个登录示例中,可能有一个`LoginProxy`,它负责与服务器交互,验证用户名和密码的正确性,并存储...

    pureMVC Demo C#

    纯MVC(PureMVC)是一个轻量级的框架,主要设计用于构建具有模型-视图-控制器(Model-View-Controller)架构的多层应用。这个“pureMVC Demo C#”是PureMVC框架在C#语言环境中的实现示例。下面将详细介绍PureMVC框架...

    pureMVC初尝试

    总的来说,PureMVC提供了一个强大的架构,可以帮助开发者在Flex项目中遵循MVC模式,提高代码的组织性和可重用性。博主的“初尝试”经验分享,对于那些同样初次接触PureMVC的人来说,无疑是一份宝贵的参考资料。通过...

    PureMVC教程(清晰版).doc

    PureMVC的实现基于观察者模式,它通过定义一组核心类来实现MVC架构。 **核心结构** 在PureMVC中,有四个关键的结构类: 1. **Proxy(代理)**:这部分相当于MVC中的模型层,主要处理数据存储和业务逻辑。它通常...

    pureMVC 入门与提高资料

    三、PureMVC的工作流程 1. 用户操作触发视图事件,视图组件发送Notification。 2. 控制器Controller接收到Notification,查找并实例化对应的Command。 3. Command执行业务逻辑,可能需要与Proxy交互获取或更新数据。...

    pure mvc c#版本 wpf

    PureMVC 是一种多层架构设计模式,主要包含三个核心角色:Model(模型)、View(视图)和 Controller(控制器)。这个框架的设计目标是简化跨平台应用开发,提供一种统一的方式来组织和协调应用程序的组件。在 C# ...

    PureMVC学习资料与案例

    PureMVC是一个开源的、轻量级的框架,主要用于构建多层架构的富客户端应用程序。这个框架最初是为ActionScript编程语言设计的,但后来发展成为支持多种编程语言,包括JavaScript、C#、Java等。它引入了一种结构化的...

    pureMVC java版框架搭建例子

    在Java环境下,PureMVC提供了一种规范化的编程方式,使得开发者可以更专注于业务逻辑,而非底层架构的实现。 标题"pureMVC java版框架搭建例子"表明我们将探讨如何在Java环境中搭建PureMVC框架。这个过程包括理解...

    Flex PureMVC手册

    ### Flex PureMVC手册知识点详解 #### 一、PureMVC概述 - **定义与来源**:PureMVC是一个开源的、跨平台的框架,专为构建可扩展、可维护的RIA(Rich Internet Applications)而设计。该框架由Futurescale公司创建...

Global site tag (gtag.js) - Google Analytics