话说在前头,我分析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模式的两种理解

  1. 在脚本中对UI元素进行的组件绑定、响应绑定、对UI元素进行的一系列复杂的操作(游戏追求的画面效果明显比传统用于显示数据的软件复杂的多)也是可以视为View层的。响应绑定的内容,就说不清楚了。如果单独建一个Controller层,View层接受用户输入后(由于游戏引擎的预处理,在代码中直接对UI组件绑定响应函数,已经是一层转发了)调用Controller的方法,Controller调用Model层的逻辑。这样的好处是“Model与View解耦,在Model需要更换时,只需要修改Controller中的代码”(模仿网络常见论调)。
  2. 但是,如果把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模式的思考的更多相关文章

  1. 稍微谈一下 javascript 开发中的 MVC 模式

    随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把 ...

  2. 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  3. 二十七、EFW框架BS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  4. Web前端开发中的MCRV模式(转)

    作者: izujian  来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...

  5. 【Web开发】Mean web开发 01-Express实现MVC模式开发

    简介 Mean是JavaScript的全栈开发框架.更多介绍 用Express实现MVC模式开发是Mean Web全栈开发中的一部分. Express 是一个基于 Node.js 平台的极简.灵活的 ...

  6. 生活中的MVC模式,一个吃货的理解。

    以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M  => Model       模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西.        ...

  7. php中的MVC模式运用

    [size=5][color=Red]php中的MVC模式运用[/color][/size] 首先我来举个例子: 一个简单的文章显示系统 简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉 ...

  8. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  9. web开发中的MVC框架与django框架的MTV模式

    1.MVC 有一种程序设计模式叫MVC,核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高了程序的可扩展性和可维护性. MVC的全拼为Model- ...

  10. 前端开发中的 MVC、MVP、MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

随机推荐

  1. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-6-元素定位大法-下篇

    1.简介 上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的定位方法的理论基础知识以及在什么情况下推荐使用.今天这一篇讲解和分享一下,在日常中很少用到或者很少见的定位 ...

  2. CF1799B Equalize by Divide题解

    本蒟蒻学习了jiangly大佬的思想,来发一个题解. 大致题意: 给定一个 \(n\) 个元素的数组 \(a\),每次可以选择 \(a[i]\) 和 \(a[j]\),然后使 \(a[i] = \lc ...

  3. LeetCode 周赛上分之旅 #33 摩尔投票派上用场

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思 ...

  4. 2023ccpc大学生程序设计竞赛-wh

    对于大一的我,只听说线下大型比赛,而第一次参加也必然心情激动,生为大一,由于没有参赛经历,所有不知道参赛技巧,所以三个人像个无头苍蝇一样,跟着榜单做,我作为写码的,其他两名队友负责思路和想法,第一道签 ...

  5. Docker安装及镜像加速器配置

    Centos7安装 卸载旧版本(如果安装过旧版本的话) yum remove docker docker-common docker-selinux docker-engine 安装Docker依赖环 ...

  6. Vue详解----一篇带你从头领悟到尾,享受飞升的感觉

    脚手架文件结构 """ ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ...

  7. FAQ:zabbix 频繁丢失数据问题分析处理

    问题描述 在grafana上看到历史数据的绘图断断续续. 问题分析 1 性能瓶颈 一开始以为是哪里的性能遇到瓶颈,把服务器和zabbix的监控数据看了一遍,各个指标都没有问题. 2 上网百度 没有找到 ...

  8. fastposter v2.16.0 让海报开发更简单

    fastposter v2.16.0 让海报开发更简单 fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像) 点击代码直接生成各种 ...

  9. 2022-1-11 控件学习3 文本渲染、TabIndex、Border、Slider、ProgressBar、

    WPF文本渲染  TextOptions.TextFormattingMode:默认值Ideal大部分是好用的,但是非常小的文本使用Display渲染会好一些 TextRenderMode:使用抗锯齿 ...

  10. test20230304考试总结(2023春 · 字符串)

    前言 赛时得分明细: A B C D Total Rank 100 100 0 70 270 2 C题如此说道:字符串没有学好的报应!! A. P4391 [BOI2009]Radio Transmi ...