pureMVC简单示例及其原理讲解
——Controller层
pureMVC由Proxy、Mediator、Command(SimpleCommand/MacroCommand)和Facade组成。
上一节讲述了示例的Model层,Model层由可视控件和Mediator组成,Mediator本身不控制各种操作,但是会将操作以通知的方式发送出去。本节将讲述pureMVC示例中的Controller层。
Controller层有以下文件组成:
- AddUserCommand.as
- DeleteUserCommand.as
- ModelPrepCommand.as
- ViewPrepCommand.as
- StartupCommand.as
AddUserCommand
。顾名思义,它是添加用户命令。让我们首先看看代码。
package com.superwulei.controller
{
import com.superwulei.model.UserProxy;
import com.superwulei.model.vo.UserVO;
import mx.controls.Alert;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class AddUserCommand extends SimpleCommand
{
override public function execute(notification:INotification):void
{
var user:UserVO = notification.getBody() as UserVO;
var userProxy:UserProxy = facade.retrieveProxy(UserProxy.NAME) as UserProxy;
if(user.isValid){
userProxy.addItem(user);
}else{
Alert.show("请检查用户名和密码");
}
}
}
}
AddUserCommand是一个单一命令(SimpleCommand),自定义SimpleCommand必须继承SimpleCommand并重写execute方法。execute方法表示这个命令的执行。曾经在上一篇《pureMVC简单示例及其原理讲解——View层
》中提到的添加用户的逻辑代码,应该在这里编写。还记得上一篇中提到的“View层本身不处理各种操作,但是发送通知”么?
上一篇中发送通知的代码
sendNotification(ApplicationFacade.USER_ADD,userForm.user);
拿出这段代码是特意的想说明AddUserCommand的execute方法中的notification.getBody()其实就是userForm.user,严谨的说应该是userFrom.user作为参数传到execute方法中来。如此我们在这里通过userProxy.addItem(user)就实现了用户的添加。userProxy中的users就多了一个user。
DeleteUserCommand
,删除用户命令。代码如下,与添加用户道理一样,不多言。
package com.superwulei.controller
{
import com.superwulei.model.UserProxy;
import com.superwulei.model.vo.UserVO;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class DeleteUserCommand extends SimpleCommand
{
override public function execute(notification:INotification):void
{
var user:UserVO = notification.getBody() as UserVO;
var userProxy:UserProxy = facade.retrieveProxy(UserProxy.NAME) as UserProxy;
userProxy.deleteItem(user);
}
}
}
ModelPrepCommand、ViewPrepCommand分别是Model层注册和View层注册。说道注册就要道一道。在pureMVC中,一切总控制是facade,因此无论是Proxy、Mediator还是Command都要在facade中注册。上面四个Command全部为SimpleCommand,最后一个StartupCommand为MacroCommand(复合命令)。StartupCommand包含了多个SimpleCommand,通过addSubCommand方法添加了子命令,并在之后在facade上注册了AddUserCommand和DeleteUserCommand。
package com.superwulei.controller
{
import com.superwulei.model.UserProxy;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class ModelPrepCommand extends SimpleCommand
{
override public function execute(notification:INotification):void
{
/* 注册Model */
facade.registerProxy(new UserProxy());
}
}
}
package com.superwulei.controller
{
import com.superwulei.view.UserFormMediator;
import com.superwulei.view.UserListMediator;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class ViewPrepCommand extends SimpleCommand
{
override public function execute(notification:INotification):void
{
var app:MyPureMVCdemo = notification.getBody() as MyPureMVCdemo;
/* 注册View */
facade.registerMediator(new UserFormMediator(app.userForm));
facade.registerMediator(new UserListMediator(app.userList));
}
}
}
package com.superwulei.controller
{
import com.superwulei.ApplicationFacade;
import org.puremvc.as3.patterns.command.MacroCommand;
public class StartupCommand extends MacroCommand
{
override protected function initializeMacroCommand():void{
addSubCommand(ModelPrepCommand);
addSubCommand(ViewPrepCommand);
/* 注册添加、删除用户命令 */
facade.registerCommand(ApplicationFacade.USER_ADD,AddUserCommand);
facade.registerCommand(ApplicationFacade.USER_DELETE,DeleteUserCommand);
}
}
}
通过使用facade的registerCommand就好象添加一个监听器一样,当有sendNotification发送出来的时候,就会有对应的Command的execute方法被执行。
Controller层包含的应该是整个应用程序的逻辑业务。
上一篇
下一篇
分享到:
- 2009-10-10 14:37
- 浏览 9787
- 评论(0)
- 论坛回复 / 浏览 (0 / 3944)
- 查看更多
相关推荐
NULL 博文链接:https://jornyguo.iteye.com/blog/975236
PureMVC实现与实践——教程.pdf 不错的pdf讲解的挺详细,大家下来看看。 PureMVC实现与实践——教程.pdf 不错的pdf讲解的挺详细,大家下来看看。 PureMVC实现与实践——教程.pdf 不错的pdf讲解的挺详细,大家下来看...
用PureMvc开发Air项目,完整工程实例。 学PureMvc的第一个完整例子
按照puremvc官方网站教程做的登陆实例,在flexBuilder3上运行过.绝对好用. 供大家学习参考.
flex PureMVC框架实例 flex PureMVC框架
而PureMVC架构在MVC基础上通过引入Mediator+事件(通知)机制很好的解决了view(视图层)与controller(控制层之间的紧耦合问题)。 在大型项目中,MVC中的Controller主要就是负责协调View与Model,让两者之间尽量“解耦”...
本例子运用PureMVC框架编写的简单例子,初学者可以通过本例子理解PureMVC的实现过程,各层的主要职责及如何通信.
如你下载后的存放的目录是D组:/下载,解压后将创建一个名为PureMVC_AS3_2_0_4的文件夹(注:其中的2_0_4是版本号) ; 打开PureMVC_AS3_2_0_4文件夹,您会发现里面有三个文件夹: asdoc :对应于API的文档,它的首页...
PureMVC教程,是学习PureMVC框架的好文章,PureMVC教程,是学习PureMVC框架的好文章,PureMVC教程,是学习PureMVC框架的好文章PureMVC教程,是学习PureMVC框架的好文章,PureMVC教程,是学习PureMVC框架的好文章,PureMVC...
LoginApp(puremvc简单例子
压缩包里面有一个用puremvc制作的as实例,另附上一个puremvc的中文文档供大家参考。
PureMVC五子棋游戏源码,学习PureMVC
公司内部培训文档,关于pureMVC架构的详细讲解,对于软件架构设计有一定指导意义。
puremvc 框架源码及教程, 附带一个使用示例 puremvc 框架源码及教程, 附带一个使用示例
简单spring4 MVC简单示例,适合初学者学习!
puremvc 讲解puremvc的源码
这是一个使用C#开发语言的基于PureMVC框架的Web登录Demo,是网上绝无仅有的实例。 本文以初学者的视角,详细地介绍PureMVC在ASP.NET的应用。 PureMVC不仅仅是Flex的MVC框架哦,而且它非常的小巧,还等什么呢,快来...
这是一个MVC例子,简单的接受了MVC的实现过程。
基于Unity3D讲解PureMVC框架,通过游戏制作讲解,适合学习框架的人
这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致。 若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC...