`
superwulei
  • 浏览: 106326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pureMVC简单示例及其原理讲解——Facade

阅读更多

pureMVC简单示例及其原理讲解

——Facade

pureMVC是一个MVC框架,核心部分包括Proxy、Mediator、Command和Facade,Facade同意管理前三个核心部分。

 

上一篇我们讲解了本示例中的Controller层,Controller层中包含添加用户命令、删除用户命令、注册View层的命令、注册Model层的命令和一个复合命令注册所有的这些和添加/删除用户命令。至此为止,我们讲解了pureMVC示例的MVC三层,但是整个应用程序目前仍然无法启动,正确运行。不要着急,看完本节,程序就可以运行了。

本节将讲述Facade,Proxy、Mediator、Command的统一管家。自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也是pureMVC组织建议的名称。先看代码:

 

package com.superwulei {
	import com.superwulei.controller.StartupCommand;
	
	import org.puremvc.as3.patterns.facade.Facade;

	public class ApplicationFacade extends Facade {
		public static const STARTUP:String      = "startup";
		public static const USER_ADD:String     = "user_added";
		public static const USER_DELETE:String  = "user_delete";

		public static function getInstance():ApplicationFacade {
			if (instance == null)
				instance = new ApplicationFacade();
			return instance as ApplicationFacade;
		}

		public function startup(app:Object):void {
			sendNotification(STARTUP, app);
		}

		override protected function initializeController():void {
			super.initializeController();
			registerCommand(STARTUP, StartupCommand);
		}
	}
}

ApplicationFacade中使用了单例模式,即整个应用程序中只会存在一个ApplicationFacade的对象。不清楚单例模式的朋友们可以通过静态方法getInstance中的代码思考一下,是不是这样。方法initializeController被重写,首先调用父类的initializeController方法,然后注册StartupCommand命令。还记得在上一章《pureMVC简单示例及其原理讲解——Controller 》中提到的StartupCommand么?它是一个复合命令,在这里注册了这个命令,其他的包括所有的Proxy、Mediator和AddUserCommand、DeleteUserCommand也会被同时注册。看一个startup方法,有一个Object类型的参数app,app接受的将是程序运行的类,没有它程序可以被加载但无法执行任何操作(这个方法具体细节本人有待研究,也欢迎广大朋友告之)。

主程序启动文件MyPureMVCdemo.mxml 代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:components="com.superwulei.view.components.*"
	creationComplete="facade.startup(this);">
	<mx:Script>
		<![CDATA[
			import com.superwulei.ApplicationFacade;
			private var facade:ApplicationFacade = ApplicationFacade.getInstance();
		]]>
	</mx:Script>
	
	<components:UserForm id="userForm" />
	<components:UserList id="userList" />
</mx:Application>

 干净多了吧?在应用程序的creationComplete事件中加入facade.startup(this)的调用,其中this就表示的是当前启动类。这样一切就会通过facade走了。为方便各位更好的理解本文,本人已经将本示例上传,请点击下方的超级链接下载。

 

这样结束似乎很不圆满,我想在听到一些反馈之后在做小结,这样可以画上一个比较美的句号。

本人对于pureMVC的研究仅限于此,恳请各位pureMVC的研究者和使用者批评、指导!

 

上一篇

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics