[size=5]模块化[/size]
代码重用
关注点分离
[size=5]MVC[/size]
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
[url=https://github.com/guyoung/GeneCocosMVCDoc/blob/master/A001/A001.md#mvc]
[attachment=79804]
[/url]MVC主要把逻辑层和表现层进行了解耦,将一个问题划分成了不同的关注点。增强了应用的稳定性,易修改性和易复用性。
[size=5]PureMVC[/size]
PureMVC是在基于模型,视图和控制器MVC模式建立的一个轻量级的应用框架,而且是免费的,它最初是执行的ActionScript 3语言使用的Adobe Flex、Flash和AIR,现在已经移植到几乎所有主要的发展平台。
[attachment=79805]
PureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和Controller。降低模块间的耦合性,各模块如何结合在一起工作对于创建易扩展,易维护的应用程序是非常重要的。
在PureMVC实现的经典MVC元设计模式中,这三部分由三个单例模式类管理,分别是Model 、View和Controller。三者合称为核心层或核心角色。
PureMVC中还有另外一个单例模式类——Facade,Facade提供了与核心层通信的唯一接口,以简化开发复杂度。
[list][li]Proxy:Model 保存对 Proxy 对象的引用,Proxy 负责操作数据模型,与远程服务通信存取数据。[/li][li]Mediator:View 保存对 Mediator 对象的引用 。由 Mediator 对象来操作具体的视图组件,包括:添加事件监听器,发送或接收 Notification ,直接改变视图组件的状态。这样做实现了把视图和控制它的逻辑分离开来。[/li][li]Command:Controller 保存所有 Command 的映射。Command 类是无状态的,只在需要时才被创建。Command 可以获取 Proxy 对象并与之交互,发送 Notification,执行其他的 Command。[/li][/list]为了彻底解耦,避免直接的函数调用,PureMVC使用观察者模式(发布/订阅)的形式传递消息。
你可以不用关心 PureMVC 的 Observer/Notification 机制是怎么实现的,它已经在框架内部实现了。你只需要使用一个非常简单的方法从 Proxy, Mediator, Command 和 Facade 发送 Notification,甚至不需要创建一个Notification 实例。
[attachment=79806]
[size=5]实现设想[/size]
Facade
[list][li]程序入口[/li][/list]Model/Domain
[list][li]定义游戏数据及逻辑,非必需[/li][/list]Model/Proxy
[list][li]初始化游戏数据[/li][li]维护游戏数据状态,使之能在各个View之间共享状态[/li][li]通知View更新状态[/li][li]和服务端数据通信[/li][/list]View/Mediator
[list][li]DirectorMediator:[list][li]维护Director,使之能和SceneMediator之间通信[/li][/list][/li][li]SceneMediator:[list][li]维护Scene,使之能和DirectorMediator、Command、Proxy之间通信[/li][li]创建Scene对象,并将具体的layer添加到场景[list][li]通知DirectorMediator运行Scene [/li][/list][/li][/list][/li][li]其他Mediator:
[list][li]维护Layer(或其他Cocos2d对象),之能和SceneMediator、Command、Proxy之间通信[/li][li]负责Layer与Layer之间通信[/li][li]绑定Layer的处理事件[/li][li]引用Proxy[/li][/list][/li][/list]View/component
[list][li]具体Cocos2d对象[/li][li]图形渲染[/li][li]Layer不直接引用其他Layer[/li][/list]View/ui
[list][li]资源[/li][/list]Controller/Command
[list][li]注册及初始化Mediator(V)、Proxy(M)[/li][li]处理跨场景动作[/li][li]通知SceneMediator更新View[/li][/list][size=5]
JavaScript代码组织[/size]
Browserify