前言

MVC是非常经典的分层设计,是时候记录下来了。

什么是MVC

MVC是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80设计的一种软件框架模式,其中定义了Model-View-Controller三层,这三层分别具有特定职能,使得开发过程变得可控。现已被广泛使用。

MVC的结构

Model

Model的作用是存储游戏对象的核心数据和状态,处理一切数据逻辑。它不直接和View层交互,一般借由事件来分发消息。

View

View的作用是从Model层查询数据状态,并即时更新游戏UI。一般来说就是UI层。

Controller

Controller的作用是接受用户的输入,并把对应命令转递给Model或View,让它们执行对应操作。简单来说,C把各种M和各种V联系起来。

MVC解决了什么问题

显然,它做到了数据和显示的解耦。这是事件驱动的功劳,现在主流的游戏UI更新方式就是事件驱动。

在早期的软件开发中,一份数据要以不同的方式展现出来,即一个M(数据),多种V(展示),很适用于MVC。

MVC的改进方案

PureMVC是一款新式的MVC框架。在传统的MVC框架上,它新增了Proxy、Mediator和Command来辅助MVC三层进行工作。

image

详情指路->PureMVC–一款多平台MVC框架

针对Unity的MVC改进方案

Unity With MVC: How to Level Up Your Game Development中提到了他对通用MVC框架的改进,以更好地适应游戏开发的需求:

现在,我想介绍一下对通用 MVC 模式的两个小修改,这有助于它适应我在使用 MVC 构建 Unity 项目时遇到的独特情况:

MVC 类引用很容易分散在整个代码中。 – 在 Unity 中,开发人员通常必须拖放实例以使其可访问,或者通过繁琐的查找语句访问它们。 – 如果 Unity 崩溃或某些错误使所有拖动的引用消失,则丢失引用地狱将随之而来。 – 这使得必须具有单个根引用对象,通过该对象可以访问和恢复应用程序中的所有实例。GetComponent( … )
某些元素封装了应高度可重用的常规功能,并且通常不属于模型、视图或控制器的三个主要类别之一。我喜欢简单地称这些为组件。它们也是实体组件意义上的“组件”,但只是充当 MVC 框架中的帮助程序。 – 例如,aComponent,它只按给定的角速度旋转事物,并且不通知,存储或决定任何东西。Rotator
为了帮助缓解这两个问题,我想出了一个修改后的模式,我称之为AMVCC,或应用程序-模型-视图-控制器-组件。

image

想深入了解可以去原博客查看。

非合理不使用

MVC对于响应式交互的UI系统有优势;但对于游戏的其他模块来说,使用MVC可能并不合理。

不同于需求相对固定的其他前端开发,游戏开发的需求复杂多变,开发时根据项目的实际需求来改造或制定框架才是合理的。不要为了用框架而生搬硬套。

参考资料

Unity With MVC: How to Level Up Your Game Development
PureMVC–一款多平台MVC框架
探讨:为什么在游戏开发中不使用MVC?

原文地址:http://www.cnblogs.com/OtusScops/p/16849090.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性