PureMVC(JS版)源码解析:认识PureMVC

在游戏开发中,对于一般网络游戏,由于需要多人协同开发,每个人负责不同的模块开发,为了减少耦合,需要用来一些MVC框架,减少模块之间的耦合。我们现在使用的mvc框架是pureMVC。pureMVC的官网:http://www.puremvc.org

pureMVC的Git地址:https://github.com/PureMVC/puremvc-js-multicore-framework/wiki

pureMVC是一个轻型的、基于观察者模式设计的MVC框架。

我们首先从Git上面把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可以被用来触发Command的执行

Facade保存了Command与Notification之间的映射。当Notification被发出时,对应的Command就会自动地由Controller执行。

Mediator发送、声明、接收Notification

当用View注册Mediator时,Mediator的listNotifications方法会被调用,以数组形式返回该Mediator对象所关心的所有Notification之后,当系统其它角色发出同名的Notification时,关心这个Notification的Mediator都会调用handleNotification方法将Notification以参数传递到方法。

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最佳实践》:http://puremvc.org/component/option,com_wrapper/Itemid,183/

其中关于pureMVC设计模式的讨论也有几篇博客值得研读:

  1. PureMVC(AS3)剖析:开篇:http://www.cnblogs.com/skynet/archive/2012/12/29/2838303.html
  2. PureMVC(AS3)剖析:实例:http://www.cnblogs.com/skynet/archive/2013/01/29/2881244.html
  3. PureMVC(AS3)剖析:吐槽:http://www.cnblogs.com/skynet/archive/2013/02/17/2914742.html
  4. PureMVC(AS3)剖析:设计模式(一):http://www.cnblogs.com/skynet/archive/2013/03/14/2958644.html
  5. PureMVC(AS3)剖析:设计模式(二):http://www.cnblogs.com/skynet/archive/2013/03/25/2980662.html
Ravior wechat
微信公众号:万物为媒, 关注一个技术人员的成长之路
写的不错, 点个赞吧!