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

Controller层有以下文件组成:

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

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

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

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

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

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

  1. package com.superwulei.controller
  2. {
  3. import com.superwulei.model.UserProxy;
  4. import org.puremvc.as3.interfaces.INotification;
  5. import org.puremvc.as3.patterns.command.SimpleCommand;
  6. public class ModelPrepCommand extends SimpleCommand
  7. {
  8. override public function execute(notification:INotification):void
  9. {
  10. /* 注册Model */
  11. facade.registerProxy(new UserProxy());
  12. }
  13. }
  14. }
  1. package com.superwulei.controller
  2. {
  3. import com.superwulei.view.UserFormMediator;
  4. import com.superwulei.view.UserListMediator;
  5. import org.puremvc.as3.interfaces.INotification;
  6. import org.puremvc.as3.patterns.command.SimpleCommand;
  7. public class ViewPrepCommand extends SimpleCommand
  8. {
  9. override public function execute(notification:INotification):void
  10. {
  11. var app:MyPureMVCdemo = notification.getBody() as MyPureMVCdemo;
  12. /* 注册View */
  13. facade.registerMediator(new UserFormMediator(app.userForm));
  14. facade.registerMediator(new UserListMediator(app.userList));
  15. }
  16. }
  17. }
  1. package com.superwulei.controller
  2. {
  3. import com.superwulei.ApplicationFacade;
  4. import org.puremvc.as3.patterns.command.MacroCommand;
  5. public class StartupCommand extends MacroCommand
  6. {
  7. override protected function initializeMacroCommand():void{
  8. addSubCommand(ModelPrepCommand);
  9. addSubCommand(ViewPrepCommand);
  10. /* 注册添加、删除用户命令 */
  11. facade.registerCommand(ApplicationFacade.USER_ADD,AddUserCommand);
  12. facade.registerCommand(ApplicationFacade.USER_DELETE,DeleteUserCommand);
  13. }
  14. }
  15. }

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

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

pureMVC简单示例及其原理讲解四(Controller层)的更多相关文章

  1. pureMVC简单示例及其原理讲解三(View层)

    本篇说的是View层,即视图层,在本示例中包括两个部分:MXML文件,即可视控件:Mediator. 可视控件 可视控件由UserForm.mxml(图1)和UserList.mxml(图2)两个文件 ...

  2. pureMVC简单示例及其原理讲解二(Model层)

    本节将讲述Model层. Model层有VO和Mediator组成,非常简单,仅仅包含两个类:UserVO和UserProxy. UserVO中的构造器用于初始化用户的添加(通过email和密码),另 ...

  3. pureMVC简单示例及其原理讲解五(Facade)

    本节将讲述Facade,Proxy.Mediator.Command的统一管家.自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也 ...

  4. pureMVC简单示例及其原理讲解一(开篇)

    pureMVC是一个MVC框架,皆在最大限度的减少MVC间的耦合性.本人刚刚接触pureMVC时感到一头雾水,不知从何入手,也不知道从何学习.好在本人有耐性且能看懂英文技术文档,面向对象的编程能力也比 ...

  5. Optaplanner规划引擎的工作原理及简单示例(2)

    开篇 在前面一篇关于规划引擎Optapalnner的文章里(Optaplanner规划引擎的工作原理及简单示例(1)),老农介绍了应用Optaplanner过程中需要掌握的一些基本概念,这些概念有且于 ...

  6. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  7. 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  8. Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例

    一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...

  9. CNN(卷积神经网络)原理讲解及简单代码

    一.原理讲解 1. 卷积神经网络的应用 分类(分类预测) 检索(检索出该物体的类别) 检测(检测出图像中的物体,并标注) 分割(将图像分割出来) 人脸识别 图像生成(生成不同状态的图像) 自动驾驶 等 ...

随机推荐

  1. UITextField和UIViewConteoller

    UITextField控件 UITextFiled常用属性和方法   UITextField是常用的文本输入控件,比如我们用的QQ的登录界面,词典输入要查询的单词都使用了文本框控件,如下图所示.之前介 ...

  2. Navicate for mysql 数据库设计-数据库分析

    在使用Navicate for mysql进行数据库设计时,如果要分析已有db的表结构,则可以将已经分析过的表放入一个新建的组中,把精力更加集中在剩下的表中,以免受到干扰.

  3. Android---Parcelable包装类的作用

    android提供了一种新的类型:Parcel.本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递. 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel ...

  4. Delphi XE7,Rad Studio XE7 官方下载(附Delphi XE7破解),更新Update1(转)

    源:http://blog.csdn.net/maxwoods/article/details/39024525

  5. java中instanceof的用法

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...

  6. Windows下编译mxnet

    操作系统: 64位Windows10 mxnet的构建和安装包括两个步骤: 第一步,编译出共享库 libmxnet.dll. 第二步,安装语言包,比如python等. 最小编译要求: 最新的支持C++ ...

  7. Ubuntu Server 重启 Apache Mysql

    a. 重启 apache sudo service apache2 restart b. 重启 MySQL sudo service mysql restart

  8. ajax跨域实现api 接口调用

    背景: 想实现跨域去调用接口, 然后同时支持下次调用,能够带cookie信息过来,同时支持来自多个源头的域名的跨域调用. 1.这样支持来自所有域名的跨域调用: 不支持跨域是,浏览器报错: 在api接口 ...

  9. ubuntu 系统 opencv3.1.0 安装

    opencv编译安装 编译环境安装: sudo apt-get install build-essential 必需包安装: sudo apt-get install cmake git libgtk ...

  10. (简单) POJ 3321 Apple Tree,树链剖分+树状数组。

    Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow ...