PureMVC(JS版)源码解析:认识PureMVC
在日常开发过程中,我们都会接触到MVC框架,今天给大家分享一个我在日常游戏开发(cocos2d-js)中使用的一款好用的MVC框架 PureMVC
。
- pureMVC的官网:http://www.puremvc.org (opens new window)
- pureMVC的Git地址:https://github.com/PureMVC/puremvc-js-multicore-framework/ (opens new window)
pureMVC是一个轻型的、基于观察者模式设计的MVC框架,为全面了解这个框架,学习其中的编程思想,从今天开始,我将从源码层面给大家解剖这款MVC框架。
我们首先从Github上面把pureMVC源码下载下来,可以看到如下目录:
PureMVC是开源框架,在src目录下,我们可以看到这款框架的源代码。 下面,简单说一下这个mvc框架:
PureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和Controller。
在PureMVC实现的经典MVC设计模式中,这三部分由三个单例模式类管理,分别是Model、View和Controller,三者合称为核心层或核心角色。
PureMVC中还有另外一个单例模式类Facade,Facade提供了与核心层(即Model,View和Controller)通信的唯一接口,以简化开发复杂度。
# Model与Proxy
Model保存了对Proxy对象的引用,Proxy负责操作数据模型,与服务器端进行通信存取数据
# View与Mediator
View保存了对Mediator对象的引用。由Mediator对象来操作具体的视图组件(View Component),包括:添加事件监听器,发送或接收Notification,直接改变视图组件(View Component)的状态。这样做实现了把视图和控制它的逻辑分离开来。
# Controller与Command
Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。
# Facede与Core
Facade类应用单例模式,它负责初始化核心层(Model\View\Controller),并能访问他们的Public方法。
在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写Model\View\Controller类。
Proxy\Mediator\Command就可以通过创建的Facade类来相互访问通信。
# 主要类说明
# Notification
Notification可以被用来触发Command的执行, Facade保存了Command与Notification之间的映射。当Notification被发出时,对应的Command就会自动地由Controller执行。
# Mediator
Mediator发送、声明、接收Notification, 当用View注册Mediator时,Mediator的listNotifications方法会被调用,以数组形式返回该Mediator对象所关心的所有Notification之后,当系统其它角色发出同名的Notification时,关心这个Notification的Mediator都会调用handleNotification方法将Notification以参数传递到方法。
# Proxy
Proxy发送,但不接收Notification, 在很多场合下,Proxy需要发送Notification,比如:Proxy从远程服务器接收到数据时,发送Notification告诉系统;或当Proxy的数据被更新时,发送Notification告诉系统。
# Facade
MVC设计模式的核心元素在PureMVC中体现为Model类、View类和Controller类。为了简化程序开发,PureMVC应用了Facade模式。 Facade是Model\View\Controller三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。 一般地,实际的应用程序都有一个Facade子类,这个Facade类对象负责初始化Controller,建立Command与Notification之间的映射,并执行一个Command注册所有的Model和View。
# Command
Command对象是无状态的;只有在需要的时候(Controller收到相应的Notification)才会被创建,并且被执行(调用execute方法)之后就会不给删除。
SimpleCommand只有一个execute方法,execute方法接收一个nofitication实例作为参数,实际应用中,你只需要重写这个方法就行。 MacroCommand让你可以顺序执行多个Command,每个执行都会创建一个Command对象并传参一个队源Notification的引用。 MacroCommand在构造方法调用自身的initalizeMacroCommand方法,实际应用中,你需重写这个方法,调用addSubCommand添加子Command.你可以任意组合SimpleCommand和MacroCommand成为一个新的Command
上面只是关于PureMVC的一些综述性知识点。如果想深入学习可以仔细研读官方文档: 《pureMVC最佳实践》 (opens new window)
参考文档
其中关于pureMVC设计模式的讨论也有几篇博客值得研读: