【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用
文章目录
- 什么是MVC?
- MVC眼花缭乱设计图
- MVP和MVC
- 最经典的MVC的业务流程
- Unity MVC 框架示例
- 1. 创建项目结构
- 2. 实现模型
- 3. 实现视图
- 4. 实现控制器
- 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. 实现模型
// 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. 实现视图
// GameView.cs
using UnityEngine;
using UnityEngine.UI;
public class GameView : MonoBehaviour
{
public Text scoreText;
public void UpdateScore(int score)
{
scoreText.text = "Score: " + score;
}
}
4. 实现控制器
// 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只是程序框架中的其中一种,其实每个架构师脑子里都存着很多说不出名字的框架,这就是为什么人家叫架构师,你叫程序员的原因。有一个好的程序框架,比糊里糊涂的写代码强千万倍,灵活迭代、高效编码,只要你想,你就可以。
参考
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
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~