游戏客户端开发中对MVC模式的思考
话说在前头,我分析MVC模式是为了确定自己要做的独立游戏的结构出来,并不适用于大型商业游戏的开发。
MVC模式的概述
关于MVC模式,Model用于存储数据,View层用于显示数据,Controller用于连接Model和View层,这种概念是比较公认的。但具体实现如何就有较大的争议了。
还有一种概念是软件的三层结构:用户交互层(UIL)、应用逻辑层(BLL)、数据访问层(DAL)。通常认为MVC是用户交互层使用的一种模式。但实际应用中MVC似乎又泛化了,广泛指代类似的、Model和View分离开来的、三层的结构。
一些实现中,Model实际是数据实体的集合,仅用于从数据库读写数据,业务逻辑主要在Controller层;另一大类实现,则是Model层存放数据和相关处理逻辑,Controller仅起到路由的功能。
MVC模式没有确切的“标准”,主要目的是实现View和Model的解耦,所以M、V两个模块不变,衍生出了一些MVXX模式(MVP、MVVM等)。
而对于游戏客户端来说,MVC模式主要指代在UI系统方面,View层和Controller层的区别看起来比较模糊。游戏中承载UI元素的GameObject (UGUI) 或 Node (Godot UI), (后简称GameObject),归为View层是没有疑问的。
模糊的MVC模式的两种理解
- 在脚本中对UI元素进行的组件绑定、响应绑定、对UI元素进行的一系列复杂的操作(游戏追求的画面效果明显比传统用于显示数据的软件复杂的多)也是可以视为View层的。响应绑定的内容,就说不清楚了。如果单独建一个Controller层,View层接受用户输入后(由于游戏引擎的预处理,在代码中直接对UI组件绑定响应函数,已经是一层转发了)调用Controller的方法,Controller调用Model层的逻辑。这样的好处是“Model与View解耦,在Model需要更换时,只需要修改Controller中的代码”(模仿网络常见论调)。
- 但是,如果把
GameObject视为View层,把上面说到的那个代码脚本视为Controller层,在代码中的响应函数直接连接Model层的逻辑,Model需要更换时,只需要修改Controller中的代码,好像也没什么问题。
那么考虑这两种结构的主要区别,前者多一个单独的“Controller”出来,View传递的事件由中转Controller接收,如果每个“View”对应一个“Controller”,那么通信更复杂了,似乎完全没有必要;如果每个“View”对应多个“Controller”,这个“Controller”就成为了一个公用的模块。在web开发中是很常见的,一些框架通过“Controller”对参数进行判断,返回相应的“View”(ASP.NET MVC)。但因为游戏开发的特殊性,如果存在“View”层的代码脚本,也通常是一个界面就对应一个绑定脚本。除此之外,前者可以在“View”层代码中单独存放UI组件相关的一些数据,后者则不行。
目的到底是什么
之前业余用过一个UI方面的MVC框架(类似上面说的前者),可能是工作经验还太浅,理解不深,或者种种原因,做了错误的判断,但感觉的确不如后者好用。
最近也浏览过几个游戏框架的设计文档,这些框架充分考虑了通用性,即使用不同的UI系统、甚至使用不同的游戏引擎,在代码中预留的位置做好相关适配就可以用。
但并没有遇到这样集中的情况,工作中的开发就确定依赖某个游戏引擎,依赖某个UI系统,并不需要频繁更换这些东西。
而个人开发来说,要做一个独立游戏的话,依赖于某个游戏引擎也是肯定的。考虑那些不使用代码编程,仅用DnD模式制作游戏的开发者……即使一套框架再通用,好像也没什么用武之地。
就个人而言,最终目的还是要做一个游戏出来,而不是做一个框架,相关理念好的学习,做不到的就舍弃,看看就好,越犹豫不决,拖的时间越长,就越难把东西做出来。就Model层和View层,无论是用一个全局类来存储也好,还是分模块来存储也好,这两层尽量分离是毋庸置疑的。剩下的怎么顺手怎么来吧。至于结构的优化、效率的优化、日志追踪等等等等,首先知道有这回事,等demo做出来之后再去做吧……
游戏客户端开发中对MVC模式的思考的更多相关文章
- 稍微谈一下 javascript 开发中的 MVC 模式
随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把 ...
- 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 二十七、EFW框架BS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- Web前端开发中的MCRV模式(转)
作者: izujian 来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...
- 【Web开发】Mean web开发 01-Express实现MVC模式开发
简介 Mean是JavaScript的全栈开发框架.更多介绍 用Express实现MVC模式开发是Mean Web全栈开发中的一部分. Express 是一个基于 Node.js 平台的极简.灵活的 ...
- 生活中的MVC模式,一个吃货的理解。
以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M => Model 模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西. ...
- php中的MVC模式运用
[size=5][color=Red]php中的MVC模式运用[/color][/size] 首先我来举个例子: 一个简单的文章显示系统 简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉 ...
- 浅析前端开发中的 MVC/MVP/MVVM 模式
MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...
- web开发中的MVC框架与django框架的MTV模式
1.MVC 有一种程序设计模式叫MVC,核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高了程序的可扩展性和可维护性. MVC的全拼为Model- ...
- 前端开发中的 MVC、MVP、MVVM 模式
MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...
随机推荐
- allure报告生成
allure生成测试报告 1.生成xml文件 pytest 测试文件所在路径 --alluredir 生成的测试结果数据保存的目录 pytest --alluredir=resport/xml/ D ...
- java查询sql动态查询需要的字段
方法一:使用"trim"标签. <select id="selTest" parameterType="mocha.framework.enti ...
- Tauri-Admin通用后台管理系统|tauri+vue3+pinia桌面端后台EXE
基于tauri+vite4+pinia2跨端后台管理系统应用实例TauriAdmin. tauri-admin 基于最新跨端技术 Tauri Rust webview2 整合 Vite4 构建桌面端通 ...
- DevOps|服务治理与服务保障实践指南
朱晋君@君哥聊技术 我自己为了消化里边的内容,整理了一个脑图,希望对你有帮助. 凌晨四点被公司的监控告警叫醒了,告警的原因是生产环境跑批任务发生故障.即刻起床处理故障,但还是花了不少时间才解决. 这次 ...
- 从零玩转系列之微信支付实战PC端支付微信回调接口搭建
一.前言 halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布 ...
- mysql 命令安装
1. mysql 下载安装好压缩文件,下面我们进入正题,少废话. 09:39:112023-08-05 先到 mysql 官方网站下载:https://dev.mysql.com/downloa ...
- LeetCode 周赛上分之旅 # 37 多源 BFS 与连通性问题
️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...
- 应用程序通过 Envoy 代理和 Jaeger 进行分布式追踪(一)
Istio 支持通过 Envoy 代理进行分布式追踪,代理自动为其应用程序生成追踪 span,只需要应用程序转发适当的请求上下文即可.Istio 支持很多追踪系统,包括 Zipkin, Jaeger, ...
- Hugging News #0807: ChatUI 官方 Docker 模板发布、🤗 Hub 和开源生态介绍视频来啦!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- Programming abstractions in C阅读笔记: p114-p117
<Programming Abstractions in C>学习第48天,p114-p117,总结如下: 一.技术总结 主要通过random number介绍了随机数的相关用法,int ...