# PqMvc-cocos **Repository Path**: 56lea/pq-mvc-cocos ## Basic Information - **Project Name**: PqMvc-cocos - **Description**: 这是一个OOP结合MVC的组合框架,消息驱动,高度解耦,高度模块化。 这只是一个框架,一个用于降低模块之间偶合度的框架。虽然有放了部分封装的工具类,但模块化,低耦合才是这个框架的作用。 - **Primary Language**: TypeScript - **License**: MulanPSL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2020-11-19 - **Last Updated**: 2024-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PqMvc-cocos ## 介绍 #### 这是一个OOP结合MVC的组合框架,只是个框架,虽然有放了部分封装的工具类,但这不是这个框架的作用。 ##### 这个框架的前身是as3的pureMVC在前人基于pureMvc定制化修改后,我进行了二次修改。不能算是单纯的MVC框架,应该是oop+mvc结合的框架。如果日常组件封装完善的话,结合框架实现oop+mvc+ecs就更完美了。 ##### 框架的核心理念就是高度模块化,降低偶合,各模块之间通过消息进行通信。所有的功能都尽可能的拆分为一个个模块,再通过框架进行组装。 ##### 模块之间完全通过消息机制进行通信,结合早期设计的数据共享方法理论上可以实现“0”偶合,当然这样会导致工作量增加不少,对部分公共数据或方法的调用会变得极为繁琐,一般不建议这么做。 ### 一、主要有以下几部分组成: ##### 1、com目录,主要存放底层框架代码,封装的工具类或组件,这个目录封装的都是通用的,不局限于单个项目 ##### 2、ext目录,主要存基于当前项目抽象封装的组件或工具脚本,包括数据结构,配置文件,组件,静态变量等等 ##### 5、module目录,用于存放模块的,所有的模块都会放在这个目录,一个模块一个子目录 ##### 6、sub目录,分包目录,大多与module中的模块一一对应。如login模块,在module和sub中各有一个login目录,module存放模块的login模块的逻辑代码,sub中则存放ui脚本和资源等动态加载的对象。 ##### 7、reg.ts文件,框架注册类,所有的模块都会在这个类中注册,也是框架的入口,只需要在项目入口实例化这个类就可以初始化框架。在这里面可以一键启用/关闭模块 ### 二、框架架构: ##### 1、框架底层有EvMgr,PqMvc,PqMgr,PqCtl,PqPxy,PqUi,PqMsg这些组成。 ##### 2、EvMgr是EventMgr的简写,功能就如名字一样,就是消息/事件管理类,也是框架一切通信的基础。里面包含消息/事件的注册,广播,删除等功能 ##### 3、PqMvc是框架代码的基类,主要就是封装了EvMgr中的功能和一些基础的通用方法 ##### 4、PqMsg是定义模块消息,模块之间通信主要通过Msg来发送接收消息 ##### 5、PqMgr是模块入口的基类,在reg中注册框架实际上就是在reg中实例化模块的Mgr,它主要负责实例化模块的Ctl,Pxy和注册模块监听的消息事件。外部所有的消息均需要通过此类才会被下发到Ctl或pxy ##### 6、PqCtl是模块的控制器,主要负责将外部消息或数据变更通知到UI进行更新。Ctl保存了ui和pxy的引用,可直接调用pxy和UI中开放的接口 ##### 7、PqPxy是负责模块内部数据处理逻辑,包括与服务端的数据通信,外部数据转换等逻辑。可直接接收由Mgr传入的外部消息,数据更新后如果要通知到UI,可通过notify通知到ctl再由 ctl传给UI ##### 8、PqUi 直接绑定到预制体,直接操作UI变化,渲染。Ui所需的数据均需由ctl传入。 ##### 9、对于普通模块,正常只需要mgr,msg,ctl,pxy,ui这几个脚本就够了。对于大型模块,可在mgr中注册多个ctl和pxy进行扩展。如果逻辑特别复杂的话,还可以调整框架,增加一个Comd来分离pxy中的逻辑。 ##### 10、resMgr资源管理类,用于处理资源预加载逻辑的类。预加载的模块如果是子包需要先设置为bundle,要不会加载失败。 ##### 11、其它的封装的统一的类还不少,自行根据demo查看吧。 ### 三、模块结构: ##### 每个模块必然包含xxMgr和xxMsg,Mgr是模块入口,也是模块的控制中心。至于其它的按需要注册。比如如果不需要进行数据处理,不需要与后端通信则不需要注册pxy,如果只需要处理数据,不需要其它UI和相应的逻辑,则只注册pxy即可,不需要注册ctl。对于比较复杂的模块,可注册多个ctl或pxy ##### 1、xxMgr(模块入口,管理类,负责注册模块内部各部分功能,这个类会常驻内存,以便实时接收消息) ##### 2、xxCtl(模块控制器,负责接收Mgr的消息并下发到Ui或Pxy,Ctl中有Ui和Pxy的引用,可直接调用) ##### 3、xxPxy(模块数据管理器,负责处理模块内部数据逻辑和与后端通信相关逻辑,xxPxy中会存有模块的数据结构xxModel来存储数据) ##### 4、xxUi(模块视图层,负责接收Ctl给过来的数据并显示到视图上) ##### 5、xxMsg(模块消息,负责定义模块监听和发送的消息,可以根据命名决定哪些消息走ctl哪些走pxy) ### 四、其它说明 ##### 1、module目录下的base模块,这是所有模块的基类,包含baseMgr,baseCtl,basePxy,baseUi,其它模块均继承此模块下对应的基类。对于通用的逻辑功能需求可直接抽象到base模块中,避免直接改到框架底层。 ##### 2、这只是开发框架,对应的工具类,自行使用自己收集封装的即可,如加载管理,缓存管理等,框架自身也有封装提供,但这部分有计划优化,还没优化完,目前还比较杂乱。 ##### 3、每个模块只有一个Mgr,但可以有N个Ctl,Pxy,Ui,Msg,一般情况下不需要多个,只针对比较大的模块功能可自行进行扩展。 ### 五、bundle分包 ##### 1、sub目录主要是用来存放分包用的,如果不需要分包可以删除此目录。 ##### 2、最好自己写一个模块创建工具来生成模块基础代码。 ### 六、问题 ##### 1、框架刚针对分包做了优化重构,还有一些未知的或优化不到位的问题 ##### 2、加载部分早期是单线程加载,针对分包优化后这块还没进行优化。建议使用自己的加载器 ##### 3、由于分包的问题,UI是绑定在预制体上的,预制体释放后ui会跟着释放,所以ctl中虽然有对ui的引用,但未绑定类型,这块暂时没想到更好的解决方法。