MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,ta最早出现在SmallTalk语言中。现在,很多计算机语言和架构都采用了MVC模式。
MVC模式概述
MVC模式是一种设计模式,由3部分组成,这3部分的作用如下:
- 模型(Model)。保存应用数据的状态,统一管理一些数据
- 视图(View)。存放视图,为用户展示信息
- 控制器(Controller)。接受用户请求,统一调控程序的所有工作,ta负责处理View和Model的事件
对应于哲学中的“内容”与“形式”,在MVC模型中,Model是“内容”,ta存储了视图所需要的数据,View是“形式”,是外部表现方式,而Controller是它们的媒介。
需要重点关注的是,Model与View不能进行任何通信,所有的通信都是通过控制器完成的,看下图:
-
- Controller和View之间可以通信,Controllor通过
outlet
(输出口)控制View,View可以通过target-action
、delegate
或者data source
(想想UITableVeiwDatasource)来和Controller通信
- Controller和View之间可以通信,Controllor通过
-
- Controller在接收到View传过来的交互事件(View就是完成让人和程序的交互的呀,比如按B1按钮)之后,经过一些判断和处理,把需要Model处理的事件递交给Model处理,Controller对Model使用的是
API
- Controller在接收到View传过来的交互事件(View就是完成让人和程序的交互的呀,比如按B1按钮)之后,经过一些判断和处理,把需要Model处理的事件递交给Model处理,Controller对Model使用的是
-
- Model在处理完数据之后,如果有需要,会通过
Notification
或者KVO
的方式告知Controller,事件已经处理完,Controller再经过判断和处理之后,考虑下一步要怎么办(是默默无闻的在后台操作,还是需要更新View,这得看Controller的“脸色”行事)。这里的无线天线很有意思,Model只负责发送通知,具体谁接收这个通知并处理它,Model并不关心,这一点非常重要,是理解Notification
模式的关键
- Model在处理完数据之后,如果有需要,会通过
MVC模式能够完成各司其职的任务模式,达到 “低耦合高内聚”,大大优化了代码的结构、代码量
低耦合: 模型、视图和控制器之间解耦,debug时易于定位是三者哪部分出了问题
高内聚: 模型、视图和控制器各自的职责清晰,功能相关代码封装在各自的组件中
这种设计使得代码更具灵活性、可维护性和可测试性
实际案例
【iOS】计算器App仿写