【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用
什么是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://blog.csdn.net/qq_36303853/article/details/142377754
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!