# 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。
待续。。。