本帖最后由 swifter 于 2016-7-21 13:05 编辑

1、前言

MVC是软件工程中的一种软件架构模式,它把软件系统分为三个基本的部分:模型Model、视图View以及控制器Controller。这种模式的目的是为了实现一种动态的程序设计,简化后续对软件系统的修改和扩展,并使得程序的某一部分的复用成为可能。三个部分按照其各自的职责划分:

  • 数据Model: 负责封装数据、存储和处理数据运算等工作
  • 视图View: 负责数据展示、监听用户触摸等工作
  • 控制器Controller: 负责业务逻辑、事件响应、数据加工等工作


在传统的MVC结构中,数据层在发生改变之后会通知视图层进行对应的处理,视图层能直接访问数据层。但在iOS中,M和V之间禁止通信,必须由C控制器层来协调M和V之间的变化。如下图所示,C对M和V的访问是不受限的,但M和V不允许直接接触控制器层,而是由多种Callbacks方式来通知控制器。

iOS MVC架构杂谈 1

iOS MVC架构杂谈 - 敏捷大拇指 - iOS MVC架构杂谈 1


本文旨在总结归纳笔者自己在开发过程中对于架构设计的理解,顺带一些笔者对控制器代码瘦身的总结。

在此声明,以下文章的观点为个人观点,如果你觉得笔者的观点存在问题,欢迎在全球最大的iOS/Swift开发者社区敏捷大拇指回帖交流。




2、如何分层

MVC是iOS开发者最常用的框架结构,即便是越来越热门的MVVM或是其他框架结构,几乎都是基于MVC模式下对各个组块的职责进一步的细化分层罢了。那么,在开发的时候如何制定三部分的层次划分呢?基本上所有的应用无非都是在做这些事情:

iOS MVC架构杂谈 2

iOS MVC架构杂谈 - 敏捷大拇指 - iOS MVC架构杂谈 2


虽然上图不能囊括所有的应用,但是基本而言大众开发者干的活就是这些了。简单的根据这些事情来分工,我们可以很快的得出MVC和工作内容的对应关系:

[Swift] 纯文本查看 复制代码
controller    网络请求、事件响应
view     数据展示、动效展示
model    数据