PureMVC总的流程是:
Façade通过一个STARTUP的Command来进行Proxy和Mediator的注册,初始化(这样Proxy和Mediator就可以接受Notification消息)。
Command通过Façade中注册的对应Notification触发。
Proxy只发送Notification(通知对应对象,数据已经变化或数据操作完毕)。
Mediator可以接受,发送和创建Notification。
Mediator通过Facade注册STARTUP的Command中传入的视图对象来操作视图。
一.首先写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.可以先忽略
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。
分享到:
相关推荐
标题 "PureMVC的Hello World" 指的是一个使用PureMVC框架实现的简单示例,这个示例通常用于教学目的,帮助开发者理解和学习如何在实际项目中应用PureMVC。PureMVC是一个轻量级的、跨平台的、开源的MVC(Model-View-...
本文将深入解析PureMVC的源码,帮助开发者理解其内部工作原理和设计理念。 首先,PureMVC的核心组件包括模型(Model)、视图(View)和控制器(Controller),以及辅助的命令(Command)、代理(Proxy)和观察者...
综上所述,"PureMVC 中文版" 和其相关文档为Flex开发者提供了一个强大的工具,帮助他们构建高效、可扩展的RIA应用,并通过实施惯用法和最佳实践,提高开发效率和代码的可维护性。对于希望深入了解和使用PureMVC的...
在这个目录下,你可能会找到如"GettingStarted"、"HelloWorld"等典型示例,它们分别展示了如何启动一个PureMVC项目和实现最基础的功能。此外,还可能有"docs"子目录,包含了详细的API文档和教程,帮助开发者深入理解...
纯MVC(PureMVC)是一个轻量级的框架,用于构建基于模型-视图-控制器(Model-View-Controller)设计模式的应用程序。这个框架最初是为ActionScript编程语言设计的,但后来被移植到了多种其他编程语言中,包括Java、...
压缩包内的中文文档提供了PureMVC框架的详细解释,包括基本概念、使用方法、示例代码和最佳实践,对于初学者来说是非常有价值的参考资料。 通过学习和使用这个PureMVC实例及中文文档,开发者能够更好地理解如何在...
actionScript的pureMVC框架HelloWorld,对于刚刚学习pureMVC的初学者有帮助
你可以通过研究这些代码,了解如何在C++项目中应用和扩展PureMVC框架,从而提高软件设计的结构化和模块化程度。同时,这个框架也支持跨平台开发,因为C++的特性使其可以在多种操作系统和设备上运行。总的来说,Pure...
在提供的压缩包文件"PureMVC_AS3"中,你将找到PureMVC在AS3中的实现,包括类库和示例代码,这些都是学习和理解PureMVC框架的好材料。你可以通过阅读源码,了解各个类的职责和交互方式,进一步掌握PureMVC的精髓。...
PureMVC是一个开源的、轻量级的框架,专门用于构建多层应用程序。它采用Model-View-Controller(MVC)设计...通过阅读源码,开发者能够更好地理解PureMVC的工作原理,从而提高在ActionScript 3开发中的效率和代码质量。
PureMVC是一种遵循模型-视图-控制器(MVC)设计模式的框架,它强调程序的三大核心部分:数据模型(Model)、视图(View)、和控制器(Controller)的分离,以便于多个视图可以共享同一数据模型,而当数据发生变化时...
PureMVC框架,作为一个多层架构设计模式的实现,为开发者提供了强大的组织和管理应用代码的方式。它源于ActionScript,后来发展为跨平台的框架,支持Java、Flex等多种编程语言。在本篇文章中,我们将深入探讨如何...
通过学习这个实例,开发者可以更好地理解PureMVC框架的工作原理,以及如何在实际项目中应用它来组织代码和实现业务逻辑。这对于提升ActionScript或Flex开发者的技能和提高代码复用性非常有帮助。
在AS3.0版本中,PureMVC提供了强大的组织和管理代码的方式,使得开发者可以更有效地进行多层应用程序的开发。下面我们将深入探讨PureMVC的核心概念、主要组件以及如何使用AS3.0实现它。 1. **纯MVC模式**: - **...
在Unity开发中,PureMVC可以帮助你更好地组织代码,实现业务逻辑与UI逻辑的分离,提高代码的可读性和可维护性。单线程版适用于常规的Unity项目,而多线程版则适合需要高效并发处理的场景,例如后台处理或复杂的计算...
纯MVC(PureMVC)是一个轻量级的框架,专为构建应用程序的模型-视图-控制器(Model-View-...这个压缩包中的“PureMVC_AS3_MultiCore_1_0_5”很可能包含了所有必要的源码文件,供开发者深入了解和使用PureMVC多核版本。
若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC中的 class(ClassName, BaseName) 函数并不提供,因为此框架本意就是为了用于cocos2d-x-lua中。
标题中的“PureMVC中文教程”表明这是一份关于PureMVC框架的中文学习资料,主要面向想要理解和掌握这一框架的开发者。PureMVC是一个开源的、轻量级的、跨平台的MVC(Model-View-Controller)设计模式框架,它提供了...