随笔分类 - pureMVC
pureMVC for Javascript
摘要:PureMVC源码中设计到的11个类已经全部解析完了,回首想想,花了一周的时间做的这点事情还是挺值得的,自己的文字组织表达能力和对pureMVC的理解也在写博客的过程中得到了些提升。我也是第一次写系列博客,有很多疏漏之处,希望各位批准指正,也希望大家多相互交流。 为了大家方便索引,对PureMVC系列文章按照理解先后顺序做了个索引: 1、认识PureMVC:http://www.cnblogs.com/iRavior/p/3347956.html2、PureMVC(JS版)源码解析(一):观察者模式解析:http://www.cnblogs.com/iRavior/p/3351993...
阅读全文
摘要:MVC设计模式的核心元素在PureMVC中体现为Model类、View类和Controller类。为了简化程序开发,PureMVC应用Facade模式。 Facade是Model\View\Controller三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。也就是说Facade类应用单例模式,它负责初始化核心层(Model\View\Controller),并能访问他们的Public方法。 在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC
阅读全文
摘要:这篇博文讲PureMVC三个核心类——Model类。Model类的构造函数及工厂函数【即getInstance()方法】和View类、Controller类是一样的,这里就不重复讲解了,只不过它把mediatorMap或commandMap变成了proxyMap。 Model类保存了所有Proxy的引用,Proxy只能发送消息,不能接受消息,所以Model类的结构相对于View和Controller简单许多。 我们先看一下Model类的registerPorxy方法:Model.prototype.registerProxy= function(proxy){ proxy.i...
阅读全文
摘要:这篇博客我们继续讲解PureMVC的三大核心类(View/Controller/Model)——Controller类。根据PureMVC模块设计,Controller类保存所有的Command映射,它的构造函数和工厂函数与View类的很相似:function Controller(key){ if(Controller.instanceMap[key] != null) { throw new Error(Controller.MULTITON_MSG); } this.multitonKey= key; Controller.instan...
阅读全文
摘要:在讲解View类之前,我们先回顾一下PureMVC的模块划分: 在PureMVC中M、V、C三部分由三个单例类管理,分别是Model/View/Controller。PureMVC中另外一个单例类——Facade。Facade提供了与MVC三个单例类(核心类)通信的唯一接口。这4个单例类构建了PureMVC的骨架。 在游戏开发中,一个游戏是由多个模块组成,如主场景模块,战斗模块等等,每个模块通常都是单独的Model/View/Controller,显然PureMVC的4个单例类是无法满足需求的,它就提供了Proxy/Mediator/Command来解决问题。 Proxy/Media...
阅读全文
摘要:前面,我们讲了与视图相关联的Mediator类,接下来我们讲讲与数据相关联的Proxy类。关于Proxy类的作用,在Proxy类源码中,有这么一段注释: * In PureMVC, Proxy classes are used to manage parts of the application's data * model. 翻译成中文就是,在PureMVC中,Proxy类用来管理应用的数据模型。 Proxy类的结构很简单,一个和Mediator类功能一样的NAME静态成员,还有一个data属性,用来存储proxy管理的数据。/** * @ignore * The Proxys na
阅读全文
摘要:之前的博文中,我们分析了SimpleCommand类和MacroCommand类,这两个类用作"业务逻辑(business logic)"处理,今天,我们讲一些和UI界面相关联的Mediator类。 我们知道在游戏中有各式各样的UI界面,我们可以把一个UI界面当做一个视图组件(View Component)。一个完整的游戏就是由许多视图组件组成的。我们通过UI界面进行交互,触发各类事件,游戏逻辑部分监听事件、处理数据,数据更新后更新视图组件。(PureMVC 工作流程图) 其中,Mediator就是视图组件(View Component)和游戏其他部分(比如业务处理(com
阅读全文
摘要:上一篇博客,我们讲解了SimpleCommand类,接下来我们看一下与SimpleCommand类很相似的MacroCommand类。 MacroCommand类和SimpleCommand类一样,都继承Notifier类(通知者),都可以发送消息。/* subclass Notifier */MacroCommand.prototype= new Notifier;MacroCommand.prototype.constructor= MacroCommand;MacroCommand类比SimpleCommand类多了一个subCommands属性。它是干嘛用的呢?其实,通过类名我们就可.
阅读全文
摘要:之前我们对PureMVC中涉及到观察者模式的三个基本类(Notification/Observer/Notifier)进行了分析,接下来将对PureMVC源码中的其他类进行分析,首先我们讲解SimpleCommand类。 SimpleCommand在MVC类中属于C部分,用于一些复杂的逻辑处理,SimpleCommand类在PureMVC被设计成了一个双面角色,它既可以扮演通知者(Notifier)的角色(即可以发送Notification),也可以扮演观察者(Observer)接受消息。通过分析源码可知,SimpleCommand类,继承了Notifier类:function S...
阅读全文
摘要:上一篇博客中,我们解析了Observer(观察者)类,这一篇博客我们来讲Notifier(通知着)类。关于Notifier类,源码注释上有这么一段: * @class puremvc.Notifier * A Base Notifier implementation. * {@link puremvc.MacroCommand MacroCommand}, * {@link puremvc.SimpleCommand SimpleCommand}, * {@link puremvc.Mediator Mediator} and * {@link puremvc.Proxy Prox...
阅读全文
摘要:上一篇博客中,我们讲到了Notification类(消息类),Notification(消息)是连接观察者(observer)和通知者(notifier)之间的桥梁。这一篇博客,主要是在代码层面上讲一下observer类。 通过源码,我们可以看出Observer类有两个属性,分别是notify和context,notify是函数类型,context是object类型,其中notify是Observer对象(观察者)接收到消息之后执行的回调函数,context是回调函数的执行作用域。/** * The Observers callback Function * * @private...
阅读全文
摘要:上篇博客,我们已经就PureMVC的设计模式进行的分析,这篇博文主要分析Notification(消息)类的实现。 通过Notification的构造函数可以看出,PureMVC中的Notification(消息)含有三个属性,消息名,消息体(传递数据),消息类类型。 其构造函数如下:function Notification(name, body, type){ this.name= name; this.body= body; this.type= type;};name是消息名,body是消息体,type是消息类型。每个属性都有get/set方法,例如:get...
阅读全文
摘要:假设一种情景,在程序开发中,我们需要在某些数据变化时,其他的类做出相应,例如在游戏中,升级一件装备,会触发玩家金币数量改变,背包数据改变和冷却队列数据改变等等。我们不可能设置setInterval,每隔一段时间就去检测数据有没有发生变化,那样效率很低。我们更希望那些具有变化属性的类能够将自己数据变化这一消息自动推送给希望检测这些变化的其他类。这个时候,”观察者模式“出现了,它能很好地替我们解决了这个问题。这种设计模式工作原理映射到实际生活中,就像我们去医院排队,不能隔两分钟就去问大夫“轮到我没”,而是坐在那里等大夫的通知,大家都接受到一个名字信号,叫到谁谁就去。而观察者就是这样一种模式...
阅读全文