找回密码
 立即注册
查看: 611|回复: 0

[其它] Unity中的MVC、MVP、MVVE框架

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-6-14 11:45:23 | 显示全部楼层 |阅读模式
本帖最后由 Shaw0xyz 于 2024-6-14 12:35 编辑

1. 引言

在Unity开发中,如何组织和管理代码是每个开发者都需要面对的问题。MVC、MVP、MVVM三种设计模式在Unity开发中被广泛应用。本文将介绍这三种设计模式,并说明它们在Unity中的具体应用。

2. MVC模式

MVC模式将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。

2.1 模型(Model)

模型负责管理应用程序的数据和业务逻辑。它独立于视图和控制器,可以复用和测试。

2.2 视图(View)

视图负责显示数据和用户交互。它监听模型的变化并更新显示。

2.3 控制器(Controller)

控制器负责接收用户输入并更新模型和视图。

2.4 Unity中的MVC应用

在Unity中,MVC模式的应用可以如下实现:

(1) 模型类

  1.     public class PlayerModel {
  2.         public int Health { get; set; }
  3.         public int Score { get; set; }
  4.     }
复制代码


(2) 视图类

  1.     public class PlayerView : MonoBehaviour {
  2.         public Text healthText;
  3.         public Text scoreText;

  4.         public void UpdateHealth(int health) {
  5.             healthText.text = "Health: " + health.ToString();
  6.         }

  7.         public void UpdateScore(int score) {
  8.             scoreText.text = "Score: " + score.ToString();
  9.         }
  10.     }
复制代码


(3) 控制器类

  1.     public class PlayerController : MonoBehaviour {
  2.         private PlayerModel model;
  3.         private PlayerView view;

  4.         void Start() {
  5.             model = new PlayerModel();
  6.             view = GetComponent<PlayerView>();
  7.         }

  8.         void Update() {
  9.             // 假设通过某种方式更新模型
  10.             model.Health = 100;
  11.             model.Score = 200;

  12.             // 更新视图
  13.             view.UpdateHealth(model.Health);
  14.             view.UpdateScore(model.Score);
  15.         }
  16.     }
复制代码


3. MVP模式

MVP模式将应用程序分为模型(Model)、视图(View)和表现者(Presenter)。

3.1 模型(Model)

与MVC中的模型相同,负责数据和业务逻辑。

3.2 视图(View)

视图同样负责显示数据和用户交互,但它通过接口与表现者交互。

3.3 表现者(Presenter)

表现者与视图和模型交互,它从模型中获取数据,并告诉视图如何显示数据。

3.4 Unity中的MVP应用

在Unity中,MVP模式的应用可以如下实现:

(1) 模型类

  1.     public class PlayerModel {
  2.         public int Health { get; set; }
  3.         public int Score { get; set; }
  4.     }
复制代码


(2) 视图接口

  1.     public interface IPlayerView {
  2.         void UpdateHealth(int health);
  3.         void UpdateScore(int score);
  4.     }
复制代码


(3) 视图类

  1.     public class PlayerView : MonoBehaviour, IPlayerView {
  2.         public Text healthText;
  3.         public Text scoreText;

  4.         public void UpdateHealth(int health) {
  5.             healthText.text = "Health: " + health.ToString();
  6.         }

  7.         public void UpdateScore(int score) {
  8.             scoreText.text = "Score: " + score.ToString();
  9.         }
  10.     }
复制代码


(4) 表现者类

  1.     public class PlayerPresenter {
  2.         private PlayerModel model;
  3.         private IPlayerView view;

  4.         public PlayerPresenter(IPlayerView view) {
  5.             this.view = view;
  6.             model = new PlayerModel();
  7.         }

  8.         public void Update() {
  9.             // 假设通过某种方式更新模型
  10.             model.Health = 100;
  11.             model.Score = 200;

  12.             // 更新视图
  13.             view.UpdateHealth(model.Health);
  14.             view.UpdateScore(model.Score);
  15.         }
  16.     }
复制代码


4. MVVM模式

MVVM模式将应用程序分为模型(Model)、视图(View)和视图模型(ViewModel)。

4.1 模型(Model)

模型负责数据和业务逻辑,与MVC和MVP中的模型类似。

4.2 视图(View)

视图负责显示数据和用户交互,通常是数据绑定到视图模型。

4.3 视图模型(ViewModel)

视图模型负责从模型获取数据,并对数据进行处理后提供给视图。

4.4 Unity中的MVVM应用

在Unity中,MVVM模式的应用可以如下实现:

(1) 模型类

  1.     public class PlayerModel {
  2.         public int Health { get; set; }
  3.         public int Score { get; set; }
  4.     }
复制代码


(2) 视图模型类

  1.     public class PlayerViewModel : MonoBehaviour {
  2.         private PlayerModel model;

  3.         public int Health {
  4.             get { return model.Health; }
  5.             set { model.Health = value; }
  6.         }

  7.         public int Score {
  8.             get { return model.Score; }
  9.             set { model.Score = value; }
  10.         }

  11.         void Start() {
  12.             model = new PlayerModel();
  13.         }

  14.         void Update() {
  15.             // 假设通过某种方式更新模型
  16.             model.Health = 100;
  17.             model.Score = 200;
  18.         }
  19.     }
复制代码


(3) 视图类

  1.     public class PlayerView : MonoBehaviour {
  2.         public PlayerViewModel viewModel;
  3.         public Text healthText;
  4.         public Text scoreText;

  5.         void Update() {
  6.             healthText.text = "Health: " + viewModel.Health.ToString();
  7.             scoreText.text = "Score: " + viewModel.Score.ToString();
  8.         }
  9.     }
复制代码


5. 总结

在Unity开发中,选择合适的设计模式可以帮助我们更好地组织代码,提高代码的可维护性和可测试性。MVC、MVP、MVVM三种模式各有优劣,开发者可以根据具体需求选择适合的模式。希望本文对你理解和应用这些设计模式有所帮助。



/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & linux ...

~互撩~ TG: @Shaw_0xyz
荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:45 , Processed in 0.050391 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表