MVC模式学习
MVC设计模式,即Model-View-Controller(模型-视图-控制器),其核心理念是清晰的划分视图(即呈现给用户且用户可以与之交互的界面)和模型(负责应用程序业务逻辑和数据处理的部分)之间的关系
在MVC架构中,视图与模型之间并不直接沟通,所有的数据需要通过控制器,这样的设计使得各个部分都可以独立,便于维护和管理
用户的交互逻辑:
用户点击视图,视图控制器接收点击,然后控制器转递给模型请求处理数据,模型处理完数据后通知控制器,控制器改变视图
接下来详细讲讲每个模块的功能
1. Model
- Model负责数据存储与处理的部分,负责存储,操作数据,同时在数据更新的时候通知Controller来更新视图部分内容
- 与Controller进行通信
- Controller直接访问model的属性和方法来获取更新数据
- Model通过委托来把数据变化通知给Controller处理,Controller则通过协议的方法来响应这些变化
- 使用通知传值的方法,来让Controller监听特定的通知,并发出相应的操作
2. View
View是它是用户与应用程序进行交互的界面层,负责显示数据和响应用户操作
- 展示数据,View根据Controller给它的数据来展示用户界面,它自己不处理这些数据,只呈现
- 接受用户的输入,如点击按钮,手势操作等,并把这些事件传给Controller来处理
- 与Controller通信
- addTarget: action: 常用来接收用户操作,并向指定目标发送一个消息
- 委托模式,Controller 通常会作为 View 的委托对象,以便处理 View 的事件
- 通知,与上文相同,允许对象发布和观察来进行通信
3. Controller
负责两部分直接的交流,从Model中获取数据,再更新View,Controller 还包含应用程序的业务逻辑和数据处理逻辑
需要注意的是,在oc中,Controller与View高度绑定,难以相互独立,我们的View几乎都是在Controller中创建的
这更容易导致你的Controller即C更加庞大,难以维护和扩展
MVC模式的优点以及可能造成的问题
优点
代码复用:由于MVC之间模块基本独立,耦合性低,增加了代码的复用性。相似的模块可以快速构建相似的场景
易拓展性:当模型,数据与控制器是相分离的时候,改变业务规则就变得很容易,数据的存储可以随意的迁移,因为模型对控制器的接口是不变的,这样界面仍然可以正确的展示,界面UI也是可以任意改变,因为它只关心界面不会影响到其他
可维护性:各个模块之间相互独立,可以快速精准的找到问题所在并进行修改
缺点
由于各部分分离,在写代码之前需要理清楚数据传到了哪,接下来应该做什么操作,使得编写更加复杂
由于Controller承担了过多的任务,很容易导致Controller过于复杂庞大