文章目录
- 什么是MVC?
- MVC眼花缭乱设计图
- MVP和MVC
- 最经典的MVC的业务流程
- [最简单的Unity MVC 框架示例](#最简单的Unity MVC 框架示例)
-
-
-
- [1. 创建项目结构](#1. 创建项目结构)
- [2. 实现模型](#2. 实现模型)
- [3. 实现视图](#3. 实现视图)
- [4. 实现控制器](#4. 实现控制器)
- [5. 使用示例](#5. 使用示例)
-
-
- 总结
- 参考
- 完结
什么是MVC?
MVC自1982年被设计出来,至今都有着很大比重的使用率,特别是目前软件及游戏迭代如此之快的情况下。高效的增删功能,低耦合又小巧灵活的框架MVC,深受广大ProgramDesigner的喜爱。
MVC框架相信大部分程序员(尤其做前后端的)都不会陌生。MVC的全称是Model-View-Controller(模型-视图-控制器),比如php非常火的thinkphp和laravel框架就是典型的MVC架构。
MVC(Model-View-Controller)是一种软件架构模式,MVC 背后的一般思想是将软件的逻辑部分 与数据 和UI(显示窗口) 分开。这有助于减少不必要的依赖关系。将应用程序分为三部分:
- Model(模型):负责数据和业务逻辑。它管理应用程序的状态和数据。
- View(视图):负责用户界面和用户交互。它展示数据并响应用户输入。
- Controller(控制器):处理用户输入并更新模型和视图。
MVC眼花缭乱设计图
我们从网上搜索mvc相关资料时,如果你多看几篇文章的话可能会发现,好像他们介绍的设计图都不太一样,这里罗列了大部分的设计图
到底上面列出的设计图哪个才是对的。其实都是对的。为什么这么说呢,这得从mvc的发展说起。
MVC框架模式最早由Trygve Reenskaug 于1978年在Smalltalk-80系统上首次提出。经过了这么多年的发展,当然会演变出不同的版本,但核心没变依旧还是三层模型Model-View-Control。
MVP和MVC
看了不少的文章,发现每个人对MVC/MVP看法都不一样。
我觉得可以这样简单的总结一下,MVP原本是MVC的一种模式变体,随着时间推移,MVC和MVP的边界确实越来越模糊。现在其实已经很难区分出MVP了,许多开发者根据项目需求和个人经验灵活调整这两种模式,形成了各自的"MVC"版本。
但是MVC的底层逻辑是不变的,都是为了实现关注点分离,提升代码的可维护性和可测试性。通过将数据、业务逻辑和用户界面分开,开发者能够更容易地管理复杂性、进行单元测试和实现代码复用。
这种灵活性使得架构设计更具适应性,但也可能导致代码风格不一致,因此在团队中保持一致性和沟通很重要。
最经典的MVC的业务流程
最简单的Unity MVC 框架示例
下面是一个简单的 Unity MVC 框架实现。
1. 创建项目结构
/Assets
/Scripts
/Model
GameModel.cs
/View
GameView.cs
/Controller
GameController.cs
2. 实现模型
csharp
// GameModel.cs
using System;
[Serializable]
public class GameModel
{
public int Score { get; private set; }
public void IncreaseScore(int amount)
{
Score += amount;
OnScoreChanged?.Invoke(Score);
}
public event Action<int> OnScoreChanged;
}
3. 实现视图
csharp
// GameView.cs
using UnityEngine;
using UnityEngine.UI;
public class GameView : MonoBehaviour
{
public Text scoreText;
public void UpdateScore(int score)
{
scoreText.text = "Score: " + score;
}
}
4. 实现控制器
csharp
// GameController.cs
using UnityEngine;
public class GameController : MonoBehaviour
{
private GameModel model;
private GameView view;
private void Start()
{
model = new GameModel();
view = GetComponent<GameView>();
model.OnScoreChanged += view.UpdateScore;
// 示例:增加分数
model.IncreaseScore(10);
}
private void Update()
{
// 示例:监听输入增加分数
if (Input.GetKeyDown(KeyCode.Space))
{
model.IncreaseScore(1);
}
}
}
5. 使用示例
- 创建一个新的 Unity 场景。
- 创建一个空 GameObject,命名为
GameController
,并添加GameController
脚本。 - 创建一个 UI Text 元素并命名为
ScoreText
,将其拖放到GameView
脚本的scoreText
字段。 - 将
GameView
脚本附加到GameController
GameObject 上。 - 运行场景,按空格键以增加分数。
总结
这个简单的 Unity MVC 框架示例展示了如何将模型、视图和控制器分离,使得项目结构清晰,易于维护。在更复杂的项目中,可以扩展这个框架来处理更复杂的逻辑和交互。
MVC只是程序框架中的其中一种,其实每个架构师脑子里都存着很多说不出名字的框架,这就是为什么人家叫架构师,你叫程序员的原因。有一个好的程序框架,比糊里糊涂的写代码强千万倍,灵活迭代、高效编码,只要你想,你就可以。
这里主要只是为了介绍unity中mvc的简单使用,但于我看来,在游戏项目中mvc框架并不非常适用,MVC是ui专用的模式,游戏不同于web前端,不同类型的游戏其架构相差非常之大(比如棋牌类游戏,rpg游戏,moba类游戏,跑酷类游戏之间的差别) ,所以游戏中mvc不同的层很难有非常清晰的定义。并不是说MVC在游戏项目中完全没用,但只有它还远远不够。游戏项目最合理的方式是由主程根据项目需求制定一套新的结构和各部分的依赖关系,并事先想好各部分的扩展和通信方式。
参考
https://unity.com/cn/how-to/build-modular-codebase-mvc-and-mvp-programming-patterns
https://blog.csdn.net/qq_39574690/article/details/80757261
https://www.jianshu.com/p/acc689be52f9
https://blog.csdn.net/milu_ELK/article/details/139920815
https://blog.csdn.net/singwhatiwanna/article/details/80904132
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~