【iOS开发】—— MVC模式

MVC简介

MVC是Model-VIew-Controller,就是模型-视图-控制器,MVC把软件系统分为三个部分:Model,View,Controller。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个。

MVC 的几个明显的特征和体现:
1、View 上面显示什么东西,取决于 Model。
2、只要 Model 数据改了,View 的显示状态会跟着更改。

Models: 数据层,负责数据的处理和获取的数据接口层。
Views: 展示层(GUI),对于 iOS 来说所有以 UI 开头的类基本都属于这层。
Controller:控制器层,它是 Model 和 View 之间的胶水或者说是中间人。一般来说,当用户对 View 有操作时它负责去修改相应 Model;当 Model 的值发生变化时它负责去更新对应 View。

三者之间的关系

提出MVC的目的是为了把数据(Model)和视图(View)分离开来,然后用控制器(Controller)作胶水来粘合M和V之间的关系。

在这里插入图片描述

详解

iOS的MVC各层职责

controller层(VC):

1、生成view,然后组装view
2、响应View的事件和作为view的代理
3、调用model的数据获取接口,拿到返回数据,处理加工,渲染到view显示
4、处理view的生命周期
5、处理界面之间的跳转

model层:

1、业务逻辑封装
2、提供数据接口给controller使用
3、数据持久化存储和读取
4、作为数据模型存储数据

view层:

1、界面元素搭建,动画效果,数据展示,
2、接受用户操作并反馈视觉效果

MVC的优缺点

1、代码复用: 三个小模块的V(cell/userInfoView)对外只暴露Set方法, 对M甚至C都是隔离状态, 复用完全没有问题. 三个大模块的MVC也可以用于快速构建相似的业务场景(大模块的复用比小模块会差一些, 下文我会说明).
2、易拓展性: 当模型,数据与控制器是相分离的时候,改变业务规则就变得很容易,数据的存储可以随意的迁移,因为模型对控制器的接口是不变的,这样界面仍然可以正确的展示,界面UI也是可以任意改变,因为它只关心界面不会影响到其他.
3、可维护性: 各个模块间职责分离, 哪里出错改哪里, 完全不影响其他模块. 利于多人团队开发
缺点:
1、没有区分业务逻辑和业务展示, 这对单元测试很不友好.
2、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
4、业务逻辑和业务展示强耦合: 可以看到, 有些业务逻辑(页面跳转/点赞/分享…)是直接散落在V层的, 这意味着我们在测试这些逻辑时, 必须首先生成对应的V, 然后才能进行测试. 显然, 这是不合理的. 因为业务逻辑最终改变的是数据M, 我们的关注点应该在M上, 而不是展示M的V.
参考文章

示例代码:
GitHub

猜你喜欢

转载自blog.csdn.net/weixin_50990189/article/details/120209629
今日推荐