# LayaPuremvc
**Repository Path**: simon94/laya-framework
## Basic Information
- **Project Name**: LayaPuremvc
- **Description**: puremvc整合laya官方示例
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: lockstep
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2020-11-11
- **Last Updated**: 2022-12-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LayaFramework
## puremvc说明
[相关资料1](https://www.jianshu.com/p/b0f9d2b3e547?tdsourcetag=s_pcqq_aiomsg)
[相关资料2](https://gameinstitute.qq.com/community/detail/127468)
#### ***#Facade:***
当前用的是 **multicore** 版本,但一般只需用到一个 **Facade** 实例;
当前项目定义了key为MAIN的 **Facade** 实例,后续有需要再增加;
#### ***#Proxy(Model(VO)):***
**DataObject(VO)** 负责数据模型;
**Proxy** 负责域逻辑,并对外公布操作数据对象的 API;
它封装了所有对数据模型的操作,不管数据是客户端还是服务器端的,对程序其他部分来说就是数据的访问是同步还是异步的。
**Mediator** 和 **Proxy** 可以提供一些操作接口让 **Command** 调用来管理 **ViewComponent** 和 **Model( Data Object)**,同时对 **Command** 隐藏具体操作的细节。
#### ***#Mediator(View):***
**View** 层只负责界面的绘制,其他交由 **Mediator** 负责;
界面创建时给界面对应的 **Mediator** 进行注册 **(Facade.registerMediator)** ;
界面销毁时注销对应 **Mediator(Facade.removeMediator)**;
这些一般都是由 **UIManager** 统一管理;
在 **(listNotificationInterests)** 中添加事件监听;
在 **(handleNotification)** 中对事件进行处理;
频繁通过 **Notification** 进行数据通信可能会加重通信负担,那么这时候可以通过**(Facade.retrieveProxy)**这样的方式直接获取数据;
UI统一调用UIManager的接口创建,mediator层只需要在UIDefine中配置好即可,UIManager会统一对mediator层进行注册(创建UI时会注册,销毁UI时会注销)。
#### ***#Command(Controller)***
通过 **(registerCommand)** 添加事件监听;
通过 **(removeCommand)** 移除事件监听;
尽量使用 **Command** ,让 **Command** 成为 **Mediator** 与 **Proxy** 之间通讯的唯一桥梁;
**Mediator** 和 **Proxy** 中发出的 **Notification** ,接收者一定是某个 **Command** ;
然后再由 **Command** 处理并将结果转发给真正的消息接收者,**Command** 就算仅仅起一个转发作用,仅仅有不到10行代码,也要创建一个 **Command** 类。
#### ***#Listener***
新增Listener类,将UI层与游戏核心逻辑解耦,游戏核心逻辑可通过addListener添加事件监听,具体示例看GameControl。
待续。。。