前言
我在看完唐老狮关于 MVC思想的介绍的视频后,颇有见解,这是否是一种Data Driven呢?本文将谈谈我的感悟……
一、我对 MVC 的理解
在视频中,唐老狮风趣地提了一个我也想提的问题:为什么 MVC 不是 CVM、VCM、或者MCV呢?
唐老狮解释道:这或许是按照重要程度来排序的,Model(数据层)、View(视图层)和Controller(控制层)。数据是最重要的,次之是用户直接能看见的视图,最后才是在背后处理一堆逻辑的控制层。
我的理解是:用户最关注的就是数据,数据一旦修改,视图也得跟着修改,Controller就担当一个中间商,Model(数据层)发生修改,就通知 Controller 该干活了! Controller 就会拿着修改后的数据找 View(视图层),命令视图 修改。这整个流程就是用户做了某些事导致数据修改了,视图是在明面上第二个变化的,而背后还有一个干最多活的 Controller。上面我的理解或许不是对“为什么 MVC 叫作 MVC”问题的解释,或许又是 XD
MVC 思想最适合的应用场景就是 UI这样存在交互的元素。在我们日常生活中,实际上有一堆运用了 MVC 思想的地方。比如,书店中书架、管理进货的店长和管理摆放书籍的员工的关系有点类似,店长专门管进货,购买书本,并将它们归好类别,并记录数量;员工在被告知哪些书应该放在哪些区域后,就将书籍摆放到书架上;顾客进店后就能看见书架上整整齐齐的书。书架就像 View(视图层),店长就像 Model(数据层),员工就像 Controller(控制层)。
二、我对 MVC 三部分的职责的总结
Model(数据层),专门管理数据,其职责如下:
- 记录有哪些类型的数据,相当于给数据分类;
- 应该具备管理数据的能力,例如增(添加新数据)、删(删除数据)、查(获取数据)、改(修改数据),以及保存数据等操作;
- 为了不与其他数据层混淆,这个数据层需要具备唯一性。
View(视图层),专门修改视图,其职责如下:
- 应记录需要修改的控件,例如文本、按钮、滑动条和下拉框等控件;
- 能够接收数据,根据数据修改控件。
Controller(控制层),专门处理数据的更新以及视图的更新,其职责如下:
- 接收用户操作的通知,根据通知修改数据层;
- 接收数据修改的通知,同时处理视图层的更新;
- 同样地,控制层需要专门控制某个视图,为了避免某个视图被多个控制层同时操作,我们得确保控制层的唯一性。
在本文中,我没有给出代码示例,仅谈谈我的感想,这或许称不上一篇“Unity中的MVC思想”的文章。XD
于2026-10-31 更新
三、MVC 美中不足之处
虽然 Model-View-Controller的思想在很大程度上降低了数据、视图间的耦合性,但是当 Model(数据层)发生修改后,可能会影响 View(视图层)的更新视图的逻辑,毕竟 View 需要来自 Model 的数据作为修改的基础。这算不上灾难性问题,甚至不是一个问题,只是一个不足之处罢了。(^人^)
为了继续降低脚本间的耦合性,可以使用更多种思想,这里称之为 MVX 思想,(X表示C被其他东西替换了,可以是P、VM和E等等),例如 MVP(Model-View-Presenter),MVVM(Model-View-View Model)和MVE(Model-View-Event)。或许还有很多字母可以使用(/▽\),但是在这里得强调一点:选什么思想,选什么框架,不是为了“使用”而使用,而是为了“满足需求”而使用,要找到适合项目的方法,对于一个小项目,我甚至不需要用 MVC思想,直接全写一个脚本里,不仅逻辑清晰,还好维护φ(* ̄0 ̄)