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

Deleteusercommand deleteusercommand.as代码  
  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。

Modelprepcommand.as代码  
  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. }
Viewprepcommand.as代码  
  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. }
Startupcommand.as代码  
  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层包含的应该是整个应用程序的逻辑业务。

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

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

  1. controller层要写什么_别再写满屏的try-catch了,真丑,全局异常处理不会吗?

    本文讲得比较细,所以篇幅较长.请认真读完,希望读完后能对统一异常处理有一个清晰的认识. 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所 ...

  2. vrf路由泄露原理和简单示例

    通过简单示例讲解一下vrf泄露的方法 前提 1.在思科设备里面称为vrf. 2.在华为设备里面称为vpn-instance. 一.原理 需求:vpn-a访问vpn-b vpn-instance有2个v ...

  3. ppst——技术视频spring AOP 的原理讲解和简单实现

    ppst 技术视频--spring AOP 的原理讲解和简单实现:请访问ppst 技术视频分享平台 , www.ppst.cc,上面有最新的技术视频,推荐大家把博客录制成视频吧,可以获取收益哦 1.s ...

  4. mysql表变量临时表_sql server 临时表详细讲解及简单示例

    一.概述 在sql server里临时表存储在TempDB库中,TempDB是一个系统数据库,它只有Simple恢复模式,也是最小日志记录操作.主要用于存放局部临时表,全局临时表,表变量,都是基于临时 ...

  5. 超详细的Vue渲染原理讲解

    目录 一.Vue简介 1. MVVM.MVP和MVC 2. Vue的基本配置 二.Vue渲染原理 1. HTML与模板 2. Vue组件的完整渲染过程 (1). Vue自身的初始化阶段 (2). 组件 ...

  6. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解

    PHP 伪静态实现技术原理讲解 发布于 2015-01-18 23:52:58 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pre ...

  7. 解密汽车全景行车安全系统的前世和今生——第二讲:原理讲解

    解密汽车全景行车安全系统的前世和今生--第二讲:原理讲解 来源:深圳市汽车电子行业协会 作者:姜卫忠 发布时间:2013-3-7  浏览(4648)次 解密汽车全景行车安全系统的前世和今生 第二讲:全 ...

  8. 【C++ 语言】智能指针 引入 ( 内存泄漏 | 智能指针简介 | 简单示例 )

    文章目录 I . 智能指针 引入 II . 智能指针 简介 III . 智能指针 简单示例 I . 智能指针 引入 1 . 示例前提 : 定义一个 Student 类 , 之后将该类对象作为智能指针指 ...

  9. Thrift的安装和简单示例

    本文只是简单的讲解Thrift开源框架的安装和简单使用示例,对于详细的讲解,后面在进行阐述. Thrift简述 Thrift是一款由Fackbook开发的可伸缩.跨语言的服务开发框架,该框架已经开源并 ...

最新文章

  1. 常用MySQL的命令集锦
  2. mysql字段定义成text类型的严重影响查询性能
  3. C# WinForm TreeView用法总结
  4. Python的模块化编程
  5. java 同域名下怎么访问同事的项目_喜大普奔,两个开源的前后端分离项目可以在线体验了...
  6. StakeDAO新增Sushiswap流动性奖励计划
  7. 动辄几个亿的东半球最强饭局:大佬们都吃了啥?
  8. 【算法学习】Fast burst images denoising
  9. c 生成html的div,createElement动态创建HTML对象脚本代码
  10. Newifi路由刷机R6830
  11. 打造前端 Deepin Linux 工作环境——安装 nodejs 环境,git 版本管理
  12. buildroot学习(七)——at91sam9g45软件平台更新
  13. 识别 Cisco交换机型号
  14. JDK中java.exe,javadoc.exe,jdb.exe,javaprof.exe分别是什么,有什么作用?
  15. 如何确定自己不是高智商?蒙提霍尔三扇门问题
  16. QTableWidget表格控件的用法
  17. git fatal: schannel: next InitializeSecurityContext failed: SEC E CERT EXPIRED (0x80090328)
  18. c++小游戏合集(AI)
  19. 柯朗微积分与数学分析习题选解(1.1 节 a)
  20. ZZULIOJ:1053: 正弦函数

热门文章

  1. 分组密码简介和五大分组模式
  2. 安川西格玛7驱动器手册_什么是伺服驱动器?选型的原则有哪些?
  3. java测试类和类_【测试开发】从测试角度看Java异常类(错误和异常区别介绍)
  4. 较简单的字节输入流输出流拷贝文件
  5. java 垃圾回收机制_Java的垃圾回收机制
  6. linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案
  7. mysql极客_极客mysql16
  8. 面向对象思想精华总结
  9. 《Python Cookbook 3rd》笔记(4.11):同时迭代多个序列
  10. linux读写文件 简单版