Pure MVC是在基于模型、视图和控制器MVC模式建立的一个轻量级的应用框架,这种开源框架是免费的,它最初是执行的ActionScript 3语言使用的Adobe Flex、Flash和AIR,现在已经移植到几乎所有主要的发展平台,目前支持两个版本框架:标准和多核,总之,标准版提供了一种简单的编码分离的方法,按照MVC设计概念。除此之外,多版本允许多个PureMVC应用运行在同一个虚拟机;模块化编程
在PureMVC实现的经典MVC元设计模式中,这三部分由三个单例模式类管理,分别是Model、View和Controller。三者合称为核心层或核心角色。
PureMVC中还有另外一个单例模式类——Facade,Facade提供了与核心层通信的唯一接口,以简化开发复杂度。
Model 与 Proxy Model保存对Proxy对象的引用,Proxy负责操作数据模型,与远程服务通信存取数据。 这样保证了Model层的可移植性。
View 与 Mediator View保存对Mediator对象的引用。由Mediator对象来操作具体的视图组件(View Component,例如Flex的DataGrid组件),包括:添加事件监听器,发送或接收Notification ,直接改变视图组件的状态。
这样做实现了把视图和控制它的逻辑分离开来。
Controller 与 Command Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。 Command可以获取Proxy对象并与之交互,发送Notification,执行其他的Command。经常用于复杂的或系统范围的操作,如应用程序的“启动”和“关闭”。应用程序的业务逻辑应该在这里实现。
Facade 与 Core Facade类应用单例模式,它负责初始化核心层(Model,View和Controller),并能访问它们的Public方法。 这样,在实际的应用中,你只需继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写Model,View和Controller类。 Proxy、Mediator和Command就可以通过创建的Facade类来相互访问通信。
Notification可以被用来触发Command的执行 Facade保存了Command与Notification之间的映射。当Notification(通知)被 发出时,对应的Command(命令)就会自动地由Controller执行。Command实现复杂的交互,降低View和Model之间的耦合性。 Mediator发送、声明、接收Notification 当用View注册Mediator时,Mediator的listNotifications方法会被调用,以数组形式返回该Mediator对象所关心的所有Notification。 之后,当系统其它角色发出同名的Notification(通知)时,关心这个通知的Mediator都会调用handleNotification方法并将Notification以参数传递到方法。 Proxy发送,但不接收Notification 在很多场合下Proxy需要发送Notification(通知),比如:Proxy从远程服务接收到数据时,发送Notification告诉系统;或当Proxy的数据被更新时,发送Notification告诉系统。 如果让Proxy也侦听Notification(通知)会导致它和View(视图)层、Controller(控制)层的耦合度太高。 View和Controller必须监听Proxy发送的Notification,因为它们的职责是通过可视化的界面使用户能与Proxy持有的数据交互。 不过对View层和Controller层的改变不应该影响到Model层。编辑本段初始化 首先Facade是一个单例。在它的构造函数里除了单例应有的部分外,还有一句initializeFacade() 具体的实现是 protected function initializeFacade( ):void { initializeModel(); initializeController(); initializeView(); } 很明显,这里揭示了Facade主要干3件事情,初始化Model,Controller,View,而这三个都是单例 Model用于保存所有的Proxy,View用于保存所有的Mediator还可以注册一些对notification的监听,而Controller主要是保持一些Command。这些类提供了注册的方法也提供了查询的方法。那么Facade这个类本身也提供了对于Proxy,Mediator,Controller的访问接口。这正符合Facade的本意:将众多的对外接口统一起来,但是也不屏蔽底层的接口。 然后例子中的程序复写了其中一个initializeContrller()的方法 override protected function initializeController():void { super.initializeController(); registerCommand( ApplicationConstants.NOTE_STARTUP,StartupCommand); registerCommand( ApplicationConstants.NOTE_LOGIN, LoginCommand); } 建立了两对notification和Command之间的映射关系。编辑本段运行时候 最后是一个startup方法来作为整个程序的开始,发出一个表示开始的notification,这个notification则触发了StartupCommand,这是一个多条Command的执行序列。分别是Model和View的准备command,它们完成了LoginProxy的注册,LoginMediator的注册并且把LoginPanel显式在舞台上等待用户输入
分享到:
相关推荐
如你下载后的存放的目录是D组:/下载,解压后将创建一个名为PureMVC_AS3_2_0_4的文件夹(注:其中的2_0_4是版本号) ; 打开PureMVC_AS3_2_0_4文件夹,您会发现里面有三个文件夹: asdoc :对应于API的文档,它的首页...
这是一个使用C#开发语言的基于PureMVC框架的Web登录Demo,是网上绝无仅有的实例。 本文以初学者的视角,详细地介绍PureMVC在ASP.NET的应用。 PureMVC不仅仅是Flex的MVC框架哦,而且它非常的小巧,还等什么呢,快来...
按照puremvc官方网站教程做的登陆实例,在flexBuilder3上运行过.绝对好用. 供大家学习参考.
PureMVC五子棋游戏源码,学习PureMVC
用PureMvc开发Air项目,完整工程实例。 学PureMvc的第一个完整例子
而PureMVC架构在MVC基础上通过引入Mediator+事件(通知)机制很好的解决了view(视图层)与controller(控制层之间的紧耦合问题)。 在大型项目中,MVC中的Controller主要就是负责协调View与Model,让两者之间尽量“解耦”...
这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致。 若是想使用,可以直接查看网上的pureMVC 文档,我并未对任何一个函数改名或者更换参数位置。 注意,这个PureMVC...
PureMVC学习资料与案例PureMVC学习资料与案例PureMVC学习资料与案例PureMVC学习资料与案例
介绍了PureMVC框架结构以及PureMVC下消息发送机制,有助于更好的了解和学习PureMVC架构
pureMVC项目包 导入的包 pureMVC项目包pureMVC项目包
pureMVC框架 pureMVC源码 学习pureMVC的知识
flex PureMVC框架实例 flex PureMVC框架
适合Unity的pureMVC,做UI和逻辑分成。比较适合的工具
pureMVC框架dll文件,
puremvc 讲解puremvc的源码
pureMVC源代码,可以直接导入到Flex Builder 3运行。
puremvc .net 2.0 /vs2010 使用PUREMVC
as3 的 puremvc 最新版本2.0.4源码
cocoscreator使用puremvc
使用javascript PureMVC开发时的类库,只要在html页面导入这几个js文件就可以使用javascript PureMVC框架了