本节将讲述pureMVC示例中的Controller层。
Controller层有以下文件组成:
- AddUserCommand.as
- DeleteUserCommand.as
- ModelPrepCommand.as
- ViewPrepCommand.as
- StartupCommand.as
AddUserCommand。顾名思义,它是添加用户命令。让我们首先看看代码。
- packagecom.superwulei.controller
- {
- importcom.superwulei.model.UserProxy;
- importcom.superwulei.model.vo.UserVO;
- importmx.controls.Alert;
- importorg.puremvc.as3.interfaces.INotification;
- importorg.puremvc.as3.patterns.command.SimpleCommand;
- publicclassAddUserCommandextendsSimpleCommand
- {
- overridepublicfunctionexecute(notification:INotification):void
- {
- varuser:UserVO=notification.getBody()asUserVO;
- varuserProxy:UserProxy=facade.retrieveProxy(UserProxy.NAME)asUserProxy;
- if(user.isValid){
- userProxy.addItem(user);
- }else{
- Alert.show("请检查用户名和密码");
- }
- }
- }
- }
AddUserCommand是一个单一命令(SimpleCommand),自定义SimpleCommand必须继承SimpleCommand并重写execute方法。execute方法表示这个命令的执行。曾经在上一篇《pureMVC简单示例及其原理讲解——View层》中提到的添加用户的逻辑代码,应该在这里编写。还记得上一篇中提到的“View层本身不处理各种操作,但是发送通知”么?
拿出这段代码是特意的想说明AddUserCommand的execute方法中的notification.getBody()其实就是userForm.user,严谨的说应该是userFrom.user作为参数传到execute方法中来。如此我们在这里通过userProxy.addItem(user)就实现了用户的添加。userProxy中的users就多了一个user。
DeleteUserCommand,删除用户命令。代码如下,与添加用户道理一样,不多言。
- packagecom.superwulei.controller
- {
- importcom.superwulei.model.UserProxy;
- importcom.superwulei.model.vo.UserVO;
- importorg.puremvc.as3.interfaces.INotification;
- importorg.puremvc.as3.patterns.command.SimpleCommand;
- publicclassDeleteUserCommandextendsSimpleCommand
- {
- overridepublicfunctionexecute(notification:INotification):void
- {
- varuser:UserVO=notification.getBody()asUserVO;
- varuserProxy:UserProxy=facade.retrieveProxy(UserProxy.NAME)asUserProxy;
- userProxy.deleteItem(user);
- }
- }
- }
ModelPrepCommand、ViewPrepCommand分别是Model层注册和View层注册。说道注册就要道一道。在pureMVC中,一切总控制是facade,因此无论是Proxy、Mediator还是Command都要在facade中注册。上面四个Command全部为SimpleCommand,最后一个StartupCommand为MacroCommand(复合命令)。StartupCommand包含了多个SimpleCommand,通过addSubCommand方法添加了子命令,并在之后在facade上注册了AddUserCommand和DeleteUserCommand。
- packagecom.superwulei.controller
- {
- importcom.superwulei.model.UserProxy;
- importorg.puremvc.as3.interfaces.INotification;
- importorg.puremvc.as3.patterns.command.SimpleCommand;
- publicclassModelPrepCommandextendsSimpleCommand
- {
- overridepublicfunctionexecute(notification:INotification):void
- {
- /*注册Model*/
- facade.registerProxy(newUserProxy());
- }
- }
- }
- packagecom.superwulei.controller
- {
- importcom.superwulei.view.UserFormMediator;
- importcom.superwulei.view.UserListMediator;
- importorg.puremvc.as3.interfaces.INotification;
- importorg.puremvc.as3.patterns.command.SimpleCommand;
- publicclassViewPrepCommandextendsSimpleCommand
- {
- overridepublicfunctionexecute(notification:INotification):void
- {
- varapp:MyPureMVCdemo=notification.getBody()asMyPureMVCdemo;
- /*注册View*/
- facade.registerMediator(newUserFormMediator(app.userForm));
- facade.registerMediator(newUserListMediator(app.userList));
- }
- }
- }
- packagecom.superwulei.controller
- {
- importcom.superwulei.ApplicationFacade;
- importorg.puremvc.as3.patterns.command.MacroCommand;
- publicclassStartupCommandextendsMacroCommand
- {
- overrideprotectedfunctioninitializeMacroCommand():void{
- addSubCommand(ModelPrepCommand);
- addSubCommand(ViewPrepCommand);
- /*注册添加、删除用户命令*/
- facade.registerCommand(ApplicationFacade.USER_ADD,AddUserCommand);
- facade.registerCommand(ApplicationFacade.USER_DELETE,DeleteUserCommand);
- }
- }
- }
通过使用facade的registerCommand就好象添加一个监听器一样,当有sendNotification发送出来的时候,就会有对应的Command的execute方法被执行。
Controller层包含的应该是整个应用程序的逻辑业务。