经典MVC
- MVC:
- MVC是一种软件开发的编程思想。
- MVC是应用软件开发、网页开发的最常用和流型的通用开发框架。
- MVC全名是Model View Controller是模型(model) -视图(view) -控制器(controller)的缩写,是一种软件设计规范。
- MVC用一种业务逻辑、数据、界面显示分离的方法组织代码将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
- 游戏中主要用于开发游戏UI系统逻辑。
![image-20220811142656982](https://lengyueling.oss-cn-shenzhen.aliyuncs.com/image-20220811142656982.png?lastModify=1660372353)
- 一般流程:
- View(界面)触发事件
- Controller(业务)处理了业务触发数据更新
- 更新了Model(数据)
- Model(带着数据)回到了View(界面)
- View更新了数据
- 优缺点:
- 优点:降低耦合,方便修改,逻辑更清晰
- 各司其职,互不干涉(编程思路更清晰)
- 有利于开发中的分工(多人协同开发时,同步并行)
- 有利于组件重用(项目换皮时,功能变化小时,提高开发效率)
- 缺点:脚本变多,体量变大,流程变复杂
- 增加了程序文件的体量(脚本由一变三)
- 增加了结构的复杂性
- 效率相对较低(对象之间的互相跳转,始终伴随着一定开销)
- 负责功能:
- 数据(Model):负责增删改查获取页面上需要的数据
- 界面(View):负责获取控件,更新控件信息
- 控制(Controller):负责业务逻辑处理(业务事件监听,触发数据更新,触发界面更新)
MVC的变种
MVX
- MVC的美中不足:
- M和V之间存在联系,也就是数据和界面之间存在耦合性,当数据结构改变时会牵扯界面逻辑的随之改动
- 在MVC中当需求变化时,需要维护的对象会在增加
- MVX:
- 数据(M)和界面(V)是必备的内容,我们可以通过改变X元素来优化原本的MVC,也就是改变联系和处理M和V的方式。
- MVP:切断View和Model的耦合,让Presenter处理一切
- MVVM:MVP的升级版,让ViewModel和V进行双向数据绑定,更新VM等同于更新V,反之同理
- MVE:用EventCenter事件中心来分发消息
- 注意:不要拘泥于框架结构和设计模式要找到一个适合自己项目的一个稳定的,有序的,能满足项目需求的实现方式。
MVP
- MVP:
- 全称为模型(Model)—视图(View)—主持人(Presenter)
- Model提供数据,View负责界面,Presenter负责逻辑的处理它是MVC的一种变式,是针对MVC中M和V存在耦合的优化
- MVP和MVC的对比:
- 在MVC中View会直接从Model中读取数据而不是通过Controller。
- 而在MVP中View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部。
- 作用:MVP中的Presenter(主持人)将完全断绝View和Model的来往主要程序逻辑都在Presenter中实现
![image-20220812030853457](https://lengyueling.oss-cn-shenzhen.aliyuncs.com/image-20220812030853457.png?lastModify=1660372353)
MVVM
- MVVM:
- 全称为模型(Model)—视图(View)—视图模型(ViewModel)
- Model提供数据,View负责界面,ViewModel负责逻辑的处理MVVM的由来是MVP(Model-View-Presenter)模式与WPF(.NET的UI框架)结合应用时发展演变过来的一种新型框架
- MVVM和MVP的对比:
![image-20220813004602260](https://lengyueling.oss-cn-shenzhen.aliyuncs.com/image-20220813004602260.png?lastModify=1660372353)
- 数据绑定:
- 将一个用户界面元素(控件)的属性 绑定到一个类型(对象)实例上的某个属性的方法。
- 如果开发者有一个MainViewMode类型的实例,那么他就可以把MainViewMode的“Lev”属性绑定到一个UI中Text的“Text”属性上。
- “绑定”了这2个属性之后,对Text的Text属性的更改将“传播”到MainViewMode的Lev属性,而对MainViewMode的Lev属性的更改同样会“传播”到Text的Text属性
![image-20220813004944712](https://lengyueling.oss-cn-shenzhen.aliyuncs.com/image-20220813004944712.png?lastModify=1660372353)
- MVVM在Unity中并不好用:
- View对象始终由我们来书写,并没有UI配置文件(如WPF中的XAML)的存在
- 如果要在Unity中实现MVVM,不仅需要写三个模块,并且还要对V和VM进行数据绑定,工作量大,好处也不够明显
- 使用MVVM实现的Unity框架:
PureMVC
- PureMVC
- PureMVC的基本结构:
- MVC思想+代理模式+中介者模式+外观模式+命令模式+观察者模式+单例模式
- 通过上述的设计模式和MVC的组合,设计出一个更加框架的MVC思想
- Model(数据模型):关联Proxy(代理)对象,负责处理数据
- View(界面):关联Mediator(中介)对象,负责处理界面
- Controller(业务控制): 管理Command(命令)对象,负责处理业务逻辑
- Facade(外观):是MVC三者的经纪人,统管全局,可以获取代理、中介、命令
- Notification:通知,负责传递信息
- 总的来说PureMVC=MVC+Proxy+Mediator+Command+Facade
![image-20220813013202860](https://lengyueling.oss-cn-shenzhen.aliyuncs.com\image-20220813013202860.png?lastModify=1660372353)
参考资料
https://www.bilibili.com/video/BV1Ha411w78E