探讨一下《数据与页面分离》的方式

数据与页面分离
前端数据来源 && 处理方式

  1. 本页面特有数据 => 目前做法: private 私有变量就行
  2. 表里面的数据 => 目前做法: 封装一个表的管理工具(会提供curd基础快捷操作) 、然后在对每张表建一个xxModel.class类,专门用来操作表的
  3. 需要保存的数据 => 目前做法: storage 单独新建一个或多个 xxxStorage.class类,然后调用保存
  4. 多个页面共享的数据 => 目前做法 RuntimeData 单独新建一个或多个 xxxRunTimeData.class 类,用来多页面共享

探讨

. 方式1、2 将就用吧

. 方式3 存在的问题是,如果新增了字段,旧的数据有没有,反序列化的时候需要做默认值处理。 否则更新小游戏后用户卡死。

.方式4 感觉解决方式太粗糙了; 是否可以引入Vuex这种方式

哎… 搞过vue、现在搞游戏前端。
感觉数据和页面不分离,写的好难受啊 … 非常的难受
各位同学是怎么解决 数据与页面分离问题的?
大家可以探讨一下自己的思路

游戏和前端的差距很大,别把你的前端思维带入到游戏当中来。

通常的网页 都是由事件去驱动数据,再由数据去驱动显示。

游戏不一样,游戏是以帧驱动的。你没办法做到完全的数据与页面分离。

1.我推荐尽量别去直接操作由由引擎给你的界面数据。在初始化的时候把引擎的界面数据抽象成你自己的数据。 (好处就是降低跟引擎的耦合,及时你换了引擎,仅仅只需要更改初始化阶段就好了,再修改一些对应的API即可,对逻辑没有重大改动)。

2.无论你用什么开发模式,什么设计思维,都无法避免耦合。但是你可以通过你的胶水层的代码,隔离数据与页面,通过胶水层让数据去控制页面。虽然说的有点像mvc,但实际上还是不一样的,总而言之就是让你的胶水更加优雅,跟数据页面的联动更加简单,才是需要思考的事情。

1赞

有些朋友提出mvvc、mvvm等这些暂时不考虑、太重了。
只想用mvc模式

但是游戏前端又和后端不一样
游戏后端数据来源大部分只有两个
1. 控制器获取到的前端参数
2. 数据库查询出来的

游戏前端数据有四个来源
	1. 页面特有
	2. 策划表
	3. 本地storage
	4. 多页面共享、也就是运行时数据

// 1、2好解决、3、4想寻求更好的解决方式、尤其时4
// 当游戏大一点 战斗或多页面联动时,运行数据很多..

看看3l的建议吧
不要走弯路了

1赞

关于这个我是用的类型安全的数据共享器,提供 set、get(支持异步)、clear 接口

可以在详细说明一下吗? 想参考参考

中介层,我一般是以bundle为单位,把数据放在中介层
数据共享器只是更好的封装

我前几天开个贴讨论下依赖注入,还被大佬教育了,可能大家加班比较累不喜欢琢磨这些了
之前尝试过用mobx(类似vue3的数据绑定)来做cocos的状态管理,但是没有html那种模板语法支持,胶水代码多了, 看起来也很不舒服,你可以玩玩看 :rofl:

en 一起折腾折腾

建议用pixi.js,数据你自己处理好了交给它渲染就行 :sweat_smile:

:innocent:

对于游戏而言,“页面” 的定义不太收敛。
显然,一个游戏玩法界面,和背包的 UI 界面,差别是非常大的。

如果此处的页面特指 UI 界面,那么 UI 界几十年的发展已经证明了,MVVM 是当下最优的选择。

MVC/MVVM 很重?

其实并不是这样的,它们只代表如何协同数据与显示逻辑的基本分层思想和实现思路。
你觉得很重,或许因为你认为 MVVM = React/Vue?
事实上,仅仅几十行代码就能利用 MVVM 的优势了。

不妨来聊聊你理解的 MVC 和 MVVM?

  1. MVC/MVVM 解决了 UI 开发中的哪些痛点?
  2. MVC/MVVM 的内核是什么?(离开了哪些特性,就不算 MVC/MVVM)
  3. 不依赖外部框架,用 Cocos 实现一个最小的 MVC/MVVM 的实现是怎样的?
2赞