`

[转] 老板让俺总结的puremvc学习笔记

阅读更多
http://bbs.9ria.com/viewthread.php?tid=78580&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

俺是新手,但老板让俺总结的给别的同事看,刚写好,趁热让兄弟们帮俺纠错。需要的也可以看下。估计代码会乱,需要的可以下载附件里面是word文档。

一.        首先写ApplicationFacade(约定俗成)继承Facade类
1.写一个单例方法用来获取它的对象,往后只通过这个方法获取它的对象:
其实也就只获取一次。
                public static function getInstance():ApplicationFacade{
                        if(instance == null) instance = new ApplicationFacade();
                        return instance as ApplicationFacade;
                }

2.写一个startup方法,里面有一个参数,通常这个参数是我们程序最外层的容器(FLEX里通常是Application,AS里就是Stage),里面也通常只有一句代码,用于启动我们的PureMVC。
                public function startup(app:Object):void{
                        sendNotification(STARTUP,app);
                }

备注:sendNotification(STARTUP,app)这就是发送消息,消息名STARTUP是这个消息名称,他是个字符串常量,app是消息的内容,其实消息还有第三个属性是个字符串,他是消息的类型。PureMVC会帮助我们把这三个东西封装成一个消息对象:
Notification( name:String, body:Object=null, type:String=null );
所以我们看到只有消息的名称是必须的,其他都为空。

3.重写 initializeController()方法,通过名字我们就知道他用来初始化control里的东西。记得执行父类的initializeController()的这个方法。
                override protected function initializeController():void{
                        super.initializeController();
                        registerCommand(STARTUP,StartupCommand);
                }

备注:registerCommand(STARTUP,StartupCommand); STARTUP是我们定义的字符串常量,StartupCommand是我们定义的一个CLASS,将来我们想执行StartupCommand只需要发送消息名为STARTUP这个地消息,上面的备注已经讲到了怎么去发送消息。当我们执行sendNotification(STARTUP,app);这时pureMVC会自动去找到StartupCommand。

二.        StartupCommand就是我们control层的东西了,下面我们来看看control层的东西,control层通需要继承下面两个类之一。我们都用StartupCommand举例
1.        如果继承SimpleCommand,这个类比较简单我们只要重写execute方法,当我们发送STARTUP命令时,PureMVC就会带着我们的消息内容一起来执行这个方法。
override public function execute(notification:INotification):void{
}

备注:notification参数就是我们前讲到的消息,他有三个参数,我们通过notification.getName()可以获取消息名,notification.getBody()可获取消息内容,
notification.getType()可获取消息的类型。

2.        如果继承MacroCommand,这个类我也不大懂,官网上说它里面的执行顺序是先进先出的原则,我们先不管这些,直接看怎么去用。也是需要重写initializeMacroCommand方法。当我们发送STARTUP命令时,PureMVC就会带着我们的消息内容一起来执行这个方法。但这个方法是没有参数的。但他真的没参数么?
override protected function initializeMacroCommand():void{
                addSubCommand(ModelPrepCommand);
addSubCommand(ViewPrepCommand);
}

备注:我们要记住这里面通常会调用addSubCommand()这个方法,这个方法也是有个CLASS类型的参数的,好现在我来回答上面提到地问题,真没参数么,其实是真的,但是PureMVC会给我们自动的把我们发送过来的消息传给ModelPrepCommand,ViewPrepCommand,为什么会这样呢,我的理解是可能这两个都需要执行同一个消息,但是他们有顺序要求,比如启动的时候我们需要一个界面,但显示的界面可能需要一些model层的数据,通常我们要先准备好数据再去显示这些数据,所以我们就有一个顺序了。initializeMacroCommand的先进先出原则也就这么体现出来了。先加进去的就会先被执行。加进去就是用addSubCommand()方法。

三.        Control讲完了,我们来讲Model吧,谁让先进先出呢,我们也遵循这个原则,Model是最
简单的了,因为他不会接收消息,只会发送消息。Model层只需要继承Proxy这个类,他没要重写的方法,我们现在只关心他的构造方法。
public static const NAME:String = "XXX";
public function XXXProxy()
{
super(NAME, new XML())  ;
//父类是这样Proxy( proxyName:String=null, data:Object=null )
}

备注:我们这里相当于只执行父类的构造方法,第一个属性是名字,一个静态常量,我们要为我们的XXXProxy()起个名字,这个名字是为方便我们调用的(如果你希望他被别人调用那这个名字是必须的),怎么调用稍后讲,第二个是我们的数据类型,其实我认为这个不是什么时候都需要的(不知道对不)。

四.        我觉得我们需要先把View层扔一边,来讲讲注册的事了,刚才我们讲了注册command,也就是我们Control层的东西,还记得么?,就是registerCommand(STARTUP,StartupCommand)好了自己复习去吧,我们现在要讲的是PureMVC里的三层里的东西是都需要注册的,好上面提到的Model层怎么注册呢。
1.注册model层的东东。
facade.registerProxy(new XXXProxy());

备注:这就注册成功了,就这么简单。但我们为什么注册他呢,还有我们刚才为什么要给XXXProxy()        起个名字呢,这个就是做个登记,将来我找起来就方便了。好讲怎么找吧,façade这个东西你可以在任何地方找到,但注册的位置在哪,什么时候注册就需要揣摩了,注册Proxy应该是放在Control层Conmmand里。

2.找model层的东东。
facade.retrieveProxy(XXXProxy.NAME) as XXXProxy;

备注:这就找到了,得到了我们注册时的对象,我们就可以直接访问XXXProxy里面的东西了。

3.        要不我们直接讲讲注册view的东西吧,因为都一样,你也可以待会回头看这部分内容。
facade.registerMediator(new XXXMediator(app));

备注:是不是感觉一样呢,差不多但不一样的就是我们这里有个参数app,app是我们之前讲过的(satge或者application),也就是视图的东西,可以是一个图片,一个按钮的引用等等。
       
4.        查找view的东西,反正我暂时也没用到查找这个功能,但这个功能确实是存在的。和找model层的东西一样。
facade.retrieveMediator(XXXMediator.NAME)

备注:不多解释,因为view层的东西也都有个字符串的静态的常量的名字。

五.        好终于来到View层了,View层我认为应该是功能最强大的,它可以直接访问Model(虽然不推荐),它可以完成任何Control里的功能。为什么呢?我也不知道,我们待会看例子理解。View层的东西都需要继承Mediator这个类,我们需要给他起个名字,和Model里的名字一样。还需要重写listNotificationInterests方法和handleNotification方法。
public static const NAME:String = "xxx";
public function XXXMediator(viewComponent:Object)
{
                        super(NAME, viewComponent);
}
override public function handleNotification(notification:INotification):void{
}
override public function listNotificationInterests():Array{
}
备注:构造方法里的viewComponent就是之前注册传过来的app或这图片啊,按钮啊的引用,这里我们就可以直接控制这些显示的东西了,我们可以在XXXMediator里直接用viewComponent这个属性。其实viewComponent可以不仅仅是一个显示控件,也可以是一个显示控件的数组。好,先看listNotificationInterests():array这个方法,他返回一个数组,一个什么数组呢,就是这个mediator所关注的消息,他可以关注很多消息,所以返回一个数组。handleNotification这个方法是干嘛用的呢,还记得command里的execute方法么,这里是一样的,看到了吧,他可以几乎可以干command里所有的事,而且还关注好多消息,command里只能一个,说明了什么呢,这就说明,Control里的command的功能要尽可能单一,增加可重用性。好了三层到此结束。

六.结束了还讲,如果你没发现问题那只能说明你不是一个好学生,我们全文上下提到好多次app,你尽然一点疑问都没有,难道PureMVC智能到可以知道我们写的程序的stage,application在哪,可以直接给我们添加上么。那必须不是啊,所以要我们手动添加,因为太简单,直接上代码吧。
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                                           xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" initialize="_facade.startup(this);”>

<fx:Script>
                <![CDATA[
                        private var _facade:ApplicationFacade = ApplicationFacade.getInstance();
                ]]>
</fx:Script>

备注:看到那个this了吧,指的就是我们的WindowedApplication因为是基于客户端的例子所以是这个。脚本里用我们最开始的单例获取了ApplicationFacade他的对象,并调用了startup方法,并传了个this过去,也就是我们的之前讲的app。
分享到:
评论
1 楼 adria2009 2012-01-05  
都写的什么,乱七八糟的 

相关推荐

    PureMVC框架学习总结

    PureMVC是一种遵循模型-视图-控制器(MVC)设计模式的框架,它强调程序的三大核心部分:数据模型(Model)、视图(View)、和控制器(Controller)的分离,以便于多个视图可以共享同一数据模型,而当数据发生变化时...

    PureMVC 中文版

    标题 "PureMVC 中文版" 指的是 PureMVC 框架的一个中文版本,这是一款广泛应用的开源框架,特别设计用于构建富互联网应用程序(RIA),尤其是基于Adobe Flex和ActionScript 3的项目。PureMVC 提供了一种模块化、结构...

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

    PureMVC是一个开源的、轻量级...通过学习PureMVC,开发者可以获得一种统一的开发流程,提高代码的可读性和可维护性,同时降低项目的复杂度。在实际项目中,合理地利用PureMVC可以提高开发效率,使得团队协作更加顺畅。

    Lua实现PureMVC

    这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致。 若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC...

    PureMVC学习资料与案例

    学习PureMVC不仅能够提升代码的组织性,还有助于提高开发效率,特别是对于大型项目,其优势更为明显。通过案例实践,你可以更好地理解和应用PureMVC框架,从而构建出高效、可维护的富客户端应用。

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

    通过学习这个实例,开发者可以更好地理解PureMVC框架的工作原理,以及如何在实际项目中应用它来组织代码和实现业务逻辑。这对于提升ActionScript或Flex开发者的技能和提高代码复用性非常有帮助。

    PureMVC五子棋游戏源码,学习PureMVC

    在这个五子棋游戏中,我们可以看到PureMVC的精髓是如何被巧妙地应用的,从而帮助我们学习和掌握这一框架的核心概念。 一、PureMVC架构基础 1. Model(模型):负责存储和管理应用程序的数据。在五子棋游戏中,模型...

    [转]pureMVC简单示例及其原理讲解

    【标题】"PureMVC简单示例及其原理讲解"涉及的是一个开源的、跨平台的MVC(Model-View-Controller)框架——PureMVC。PureMVC以其轻量级和高度可扩展性,在开发中得到了广泛应用。这篇博客文章通过一个简单的示例,...

    pureMVC资料包

    通过这个资料包,开发者不仅可以获取到PureMVC的实现库,还可以深入学习和理解PureMVC的设计原则和使用方法,从而提升软件开发的效率和质量。无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的编程技能。

    Unity 专用 pureMVC

    Unity 专用纯MVC框架详解 Unity是一款强大的跨平台游戏引擎,被广泛应用于游戏开发、虚拟现实、增强现实等领域。在构建复杂的用户界面...在压缩包中的PureMVC文件,包含了实现这一框架的源代码,供开发者学习和使用。

    qt版本pureMVC

    Qt版本的PureMVC是一个基于设计模式的框架,主要用于构建可维护性和可扩展性极高的应用程序。这个框架的实现是将经典的MVC(Model-View-Controller)模式应用于Qt编程环境,为Qt开发者提供了一种结构化的方法来组织...

    PureMVC.rar

    PureMVC是一个开源的、轻量级的MVC(Model-View-Controller)框架,它最初是为ActionScript设计的,但后来发展出了多种语言版本,包括C#。本压缩包"PureMVC.rar"提供了PureMVC在C#平台上的实现,包括单线程版和多...

    PureMVC_study

    【PureMVC学习指南】 PureMVC是一款轻量级的框架,主要应用于Flex和AS3开发,它基于经典的Model-View-Controller(MVC)设计模式,为开发者提供了一种组织代码、解耦组件的强大工具。PureMVC的核心理念是通过分离...

    PureMVC C#框架

    10. **学习曲线**:PureMVC的简单API和清晰的架构使得开发者能够快速上手,同时也有助于团队成员间的协作和代码审查。 在"puremvc-csharp-standard-framework-master"这个压缩包中,你将找到PureMVC C#标准版的源...

    pureMVC_AS3

    **纯MVC(PureMVC)AS3版详解** PureMVC是一款轻量级的框架,主要用于实现Model-View-Controller(MVC)设计模式。它最初由Dan Varga创建,旨在提供一种跨平台的解决方案,使开发人员能够更有效地组织和管理应用...

    PureMvc实例 PureMvc第一个实例

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

    PureMVC登陆例子

    总结来说,这个"PureMVC登录例子"展示了如何利用PureMVC框架来构建一个简单的登录功能。通过Proxy处理数据,Mediator协调视图和用户交互,Command执行业务逻辑,整个流程高效且模块化。对于初学者而言,这是一个很好...

    pureMVC源代码

    纯MVC(PureMVC)是一个轻量级的框架,用于构建基于模型-视图-控制器(Model-View-Controller)设计模式的应用程序。这个框架最初是为ActionScript编程语言设计的,但后来被移植到了多种其他编程语言中,包括Java、...

    PureMVC.zip

    学习和使用PureMVC,开发者可以更好地理解和实践MVC模式,提升Unity项目的专业性和可维护性。同时,由于PureMVC具有跨平台的特性,这意味着你在Unity中的代码可以应用于其他支持PureMVC的平台,如Flash、Java等。

Global site tag (gtag.js) - Google Analytics