pureMVC简单示例及其原理讲解四(Controller层)

本节将讲述pureMVC示例中的Controller层。

Controller层有以下文件组成:

  • AddUserCommand.as
  • DeleteUserCommand.as
  • ModelPrepCommand.as
  • ViewPrepCommand.as
  • StartupCommand.as

AddUserCommand 。顾名思义,它是添加用户命令。让我们首先看看代码。

Addusercommand.as代码  收藏代码
  1. package com.superwulei.controller  
  2. {  
  3.     import com.superwulei.model.UserProxy;  
  4.     import com.superwulei.model.vo.UserVO;  
  5.       
  6.     import mx.controls.Alert;  
  7.       
  8.     import org.puremvc.as3.interfaces.INotification;  
  9.     import org.puremvc.as3.patterns.command.SimpleCommand;  
  10.   
  11.     public class AddUserCommand extends SimpleCommand  
  12.     {  
  13.         override public function execute(notification:INotification):void  
  14.         {  
  15.               
  16.             var user:UserVO = notification.getBody() as UserVO;  
  17.             var userProxy:UserProxy = facade.retrieveProxy(UserProxy.NAME) as UserProxy;  
  18.               
  19.             if(user.isValid){  
  20.                 userProxy.addItem(user);  
  21.             }else{  
  22.                 Alert.show("请检查用户名和密码");  
  23.             }  
  24.         }  
  25.           
  26.     }  
  27. }  

 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 ,删除用户命令。代码如下,与添加用户道理一样,不多言。

Deleteusercommand deleteusercommand.as代码  收藏代码
  1. package com.superwulei.controller  
  2. {  
  3.     import com.superwulei.model.UserProxy;  
  4.     import com.superwulei.model.vo.UserVO;  
  5.       
  6.     import org.puremvc.as3.interfaces.INotification;  
  7.     import org.puremvc.as3.patterns.command.SimpleCommand;  
  8.   
  9.     public class DeleteUserCommand extends SimpleCommand  
  10.     {  
  11.         override public function execute(notification:INotification):void  
  12.         {  
  13.             var user:UserVO = notification.getBody() as UserVO;  
  14.             var userProxy:UserProxy = facade.retrieveProxy(UserProxy.NAME) as UserProxy;  
  15.             userProxy.deleteItem(user);  
  16.         }  
  17.           
  18.     }  
  19. }  

 ModelPrepCommand、ViewPrepCommand分别是Model层注册和View层注册。说道注册就要道一道。在pureMVC中,一切总控制是facade,因此无论是Proxy、Mediator还是Command都要在facade中注册。上面四个Command全部为SimpleCommand,最后一个StartupCommand为MacroCommand(复合命令)。StartupCommand包含了多个SimpleCommand,通过addSubCommand方法添加了子命令,并在之后在facade上注册了AddUserCommand和DeleteUserCommand。

Modelprepcommand.as代码  收藏代码
  1. package com.superwulei.controller  
  2. {  
  3.     import com.superwulei.model.UserProxy;  
  4.       
  5.     import org.puremvc.as3.interfaces.INotification;  
  6.     import org.puremvc.as3.patterns.command.SimpleCommand;  
  7.   
  8.     public class ModelPrepCommand extends SimpleCommand  
  9.     {  
  10.         override public function execute(notification:INotification):void  
  11.         {  
  12.             /* 注册Model */  
  13.             facade.registerProxy(new UserProxy());  
  14.         }  
  15.     }  
  16. }  

 

Viewprepcommand.as代码  收藏代码
  1. package com.superwulei.controller  
  2. {  
  3.     import com.superwulei.view.UserFormMediator;  
  4.     import com.superwulei.view.UserListMediator;  
  5.       
  6.     import org.puremvc.as3.interfaces.INotification;  
  7.     import org.puremvc.as3.patterns.command.SimpleCommand;  
  8.   
  9.     public class ViewPrepCommand extends SimpleCommand  
  10.     {  
  11.         override public function execute(notification:INotification):void  
  12.         {  
  13.             var app:MyPureMVCdemo = notification.getBody() as MyPureMVCdemo;  
  14.             /* 注册View */  
  15.             facade.registerMediator(new UserFormMediator(app.userForm));  
  16.             facade.registerMediator(new UserListMediator(app.userList));  
  17.         }  
  18.     }  
  19. }  

 

Startupcommand.as代码  收藏代码
  1. package com.superwulei.controller  
  2. {  
  3.     import com.superwulei.ApplicationFacade;  
  4.       
  5.     import org.puremvc.as3.patterns.command.MacroCommand;  
  6.   
  7.     public class StartupCommand extends MacroCommand  
  8.     {  
  9.         override protected function initializeMacroCommand():void{  
  10.             addSubCommand(ModelPrepCommand);  
  11.             addSubCommand(ViewPrepCommand);  
  12.             /* 注册添加、删除用户命令 */  
  13.             facade.registerCommand(ApplicationFacade.USER_ADD,AddUserCommand);  
  14.             facade.registerCommand(ApplicationFacade.USER_DELETE,DeleteUserCommand);  
  15.         }  
  16.     }  
  17. }  

 通过使用facade的registerCommand就好象添加一个监听器一样,当有sendNotification发送出来的时候,就会有对应的Command的execute方法被执行。

Controller层包含的应该是整个应用程序的逻辑业务。

转载于:https://www.cnblogs.com/fuland/p/3632847.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ActiveMQ学习笔记(2)——JMS消息模型

2019独角兽企业重金招聘Python工程师标准>>> 1.1 JMS模型简介 JMS支持两种消息通信模型: 点对点模型(Point to Point,P2P)发布者/订阅者模型(publish/subscribe, pub/sub)P2P模型中,Sender把一…

C# 图片盖章功能实现,支持拖拽-旋转-放缩-保存

实现图片盖章功能,在图片上点击,增加“图章”小图片,可以拖拽“图章”到任意位置,也可以点击图章右下角园框,令图片跟着鼠标旋转和放缩。 操作方法:1.点击增加“图章”2.选中移动图标3.点中右下角放缩旋转图…

《Effective Objective-C 2.0》1、熟悉Objective-C

该系列是《Effective Objective-C 2.0——编写高质量iOS与OS X代码的52个有效方法》的读书笔记。 第一条:了解Objective-C语言的起源 同C类似,Objective-C也是C语言进行面相对象化的扩展。二者存在一个根本性的区别: C是一种基于函数调用的语…

图像编码的必要性、可行性、技术分类、评价指标

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 1、图像编码的必要性 图像的数据量非常大,为了有效地传输和存储图像,有必要压缩图像的数据量。随着现代通信技术的发展,要求传输的图像信息的种类和数据量愈来愈大。若不…

【一周一算法】算法2:邻居好说话——冒泡排序

【啊哈!算法】    简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[2100000001]。…

用TextPaint来绘制文字

TextPaint是paint的子类,用它可以很方便的进行文字的绘制,一般情况下遇到绘制文字的需求时,我们一般用TextPaint所提供的方法。开始学习如何绘制文字之前,我们必须要先了解下android中文字是怎么绘制到屏幕上的,文字的…

第二季4:初始化MPP系统(step12)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 本文将详细介绍博文第二季3:sample_venc.c的整体分析中提及的“初始化MPP系统”。 MPP系统的初始化包括以下步骤: 配置VB:HI_MPI_VB_SetConf函数 初始化…

存储过程——介绍(一)

由于工作缘故,在工作中用到储存过程较少,在下班之余出于对学习的热情,以下分享下学习储存过程心得,往大牛们指点迷津: 储存过程:官方解释为可以将一些预先编译的sql语句集中起来有sql service数据库服务器来…

《人月神话》观后感

1.外科手术队伍 项目经理在项目的初期必须清楚的估计项目的人月运作模式(时间、人力在项目各阶段的分配),例如什么时候需要出什么样成果,决定了什么时候需要什么样的人加入项目,这是项目经理的责任。 2.贵族专制…

第二季5:配置视频捕获模块(step3:VI模块)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 本文将详细介绍博文第二季3:sample_venc.c的整体分析提及的“配置视频捕获模块”。 分析方法上,我们首先介绍VI模块相关的宽动态、设备、通道等概念,然后…

git 代理设置

git 代理设置: git config --global http.proxy http://proxy.com:8080git config --global https.proxy http://proxy.com:8080git config --global http.sslverify false 转载于:https://www.cnblogs.com/lizhanglong/p/3642152.html

简化Java中的异常处理

为什么80%的码农都做不了架构师?>>> #1. 不需要Checked异常 Java中的Checked异常,可以说有弊无利,它除了能带来一系列的麻烦,能干的事情Unchecked异常都能干。 ##1.1. 代码污染 首先,当一个方法声明抛出一…

Linux常用命令之wget

wget:从网络上下载文件到当前目录。 转载于:https://www.cnblogs.com/nufangrensheng/p/3646055.html

MySQL的timestamp字段可以使用的范围是多少

还是之前工作中遇到的一个小问题。我在做一个收据采集的程序,需要记录起始时间和结束时间,在数据库中是用timestamp字段来保存的,有些情况下不存在起始时间,此时就需要设置一个默认的起始时间,当初想着是使用timestamp…

Serv-U搭建FTP服务器

1、打开软件,勾选start automatically 2、点击domain,新建domain 3、依次输入IP、端口号、域名、域名类型 完成后的样子 4、右键单击Users,新建用户。依次输入用户名、Home目录、用户密码。 如果需要创建匿名账户,则用户名用Anony…

第二季7:创建配置编码通道(step5:VENC部分)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 本文将详细介绍博文第二季3:sample_venc.c的整体分析提及的“创建配置编码通道”。 我们首先介绍VENC模块相关的概念,然后绘制该模块的函数调用关系图谱,…

hdu 1176 馅饼

略微简单的动态规划 只是简单贴代码就好了。 #include <stdio.h> #include <string.h>int dp[100007][11]; int ans[100007][11]; int n,N;inline int Max(int x,int c){return x>c?x:c; } int v[16]; void DP() {int i,j;memset(v,0,sizeof(v));memset(ans,0,…

iOS开发-Get请求,Post请求,同步请求和异步请求

标题中的Get和Post是请求的两种方式&#xff0c;同步和异步属于实现的方法&#xff0c;Get方式有同步和异步两种方法&#xff0c;Post同理也有两种。稍微有点Web知识的&#xff0c;对Get和Post应该不会陌生&#xff0c;常说的请求处理响应&#xff0c;基本上请求的是都是这两个…

js new

如果一个函数前面带上new来调用该函数&#xff0c;那么将创建一个隐藏连接到该函数的prototype成员的新对象&#xff0c;同时this将被绑定到那个新对象上 即&#xff1a; function B(){} var anew B(); 类似于 function B(){} var a{}; a.__proto__B.prototype; B.call(a); 转载…

第二季8:保存编码得到的码流(step6:Save to File)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 前言 本文将详细介绍博文第二季3&#xff1a;sample_venc.c的整体分析提及的“ 保存编码得到的码流 ”。 即把编码得到的三路码流&#xff08;三路码流都是H264格式的&#xff0c;只是分辨率不同…