做iOS开发已经有5个年头了,应用开发已经比较熟练了,也来到了一个迷茫的阶段,彷佛触到了技术天花板。其实心知肚明,业务功能实现是比较得心应手了,但是在更高级的顶层设计方面还欠缺的很多。因此,必须转变思想,不能再从实现功能角度来提高自己的技术,而是要从实现的方法,方式上提高自己。写出具有通用性、灵活性、隔离性等角度的代码。多看源码。从头梳理一下框架设计知识。

前言
MVC是软件工程中的一种软件架构模式,它把软件系统分为三个基本的部分:模型Model、视图View以及控制器Controller。这种模式的目的是为了实现一种动态的程序设计,简化后续对软件系统的修改和扩展,并使得程序的某一部分的复用成为可能。三个部分按照其各自的职责划分:
  • 数据Model: 负责封装数据、存储和处理数据运算等工作
  • 视图View: 负责数据展示、监听用户触摸等工作
  • 控制器Controller: 负责业务逻辑、事件响应、数据加工等工作

MVC 框架设计模式

  • Model层: 模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。

  • View层: 视图对象是应用程序中用户可以看见的对象。视图(View)是控制器的侍从,是控制器要使用的类,用于构建UI。

  • Controller层: Model 与 View层的中介,把Model数据在View上展示出来。控制器对象:控制模型呈现在屏幕上。

目的: 低耦合,可复用

MVC的架构模式图:

MVC 各层之间的通信
  • Controller要完全知道Model的内容,不受限制地访问Model;相反,Model 通过 Notification 和 KVO 机制与 Controller 间接通信。
  • Controller也能与View通信,如通过outlet;相反View也能与Controller通信,但是View是通用的,所以它不能对Controller的类知道得太多,只能以一种“盲”的方式去通信,如关联一个action、委托(delegate)协议。
  • Model 和 View 永远不能相互通信,只能通过 Controller 传递。

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

缺点:

  • 导致Controller臃肿,代码特别多,视图一复杂起来,代码量过长,不好维护;
  • 写在Controller里View的代码无法复用;

MVC 的示例demo

比较简单不再举例。就是你把View 声明和数据请求写到Controller 的臃肿写法。
贴出2个写的很好典型的示例:
iOS MVC实例讲解
iOS通用的MVC模式项目框架MobileProject

参考文章

MVC 模式
iOS架构入门 - MVC模式实例演示
浅谈iOS中MVC

iOS进阶之架构设计MVC(1)相关推荐

  1. iOS进阶之架构设计MVC、MVP、MVVM(12)

    转载自:iOS架构模式MVC.MVP.MVVM(内附demo) 文章对比了MVC.MVP.MVVM,结构清晰,示例简单,容易让人接受.所以转载至此.以供自己赏读. MVC MVC的实现思路是:用户操作 ...

  2. iOS进阶之架构设计MVVM的理解(3)

    iOS进阶之架构设计MVC(1) iOS进阶之架构设计MVP(2) 前言: 前两篇文章已经理解MVC.MVP的设计模式.特别是MVP,比较难以理解,不好把握.需要多多实践,对比.来优化P段,找到最适合 ...

  3. iOS进阶之架构设计MVVM的实现示例(5)

    MVVM的核心在于:(个人意见) 1.MVVM的双向绑定: 2.Model与View解耦: 选用RAC实现MVVM架构,不是必要的,重要的实现架构,也可以自己用KVO实现,这里推荐使用Facebook ...

  4. iOS进阶之架构设计MVVM的实现示例(4)

    实践是检验真理的唯一真理.让我们来看个简单的实现MVVM设计的demo例子吧. MVVM加深理解 MVVM模式将Presenter改名为ViewModel,基本上与MVP模式完全一致.唯一的区别是,它 ...

  5. iOS进阶之架构设计MVVM模式实践(11)

    1.下面通过一个实例来体会一下MVVM架构模式,下面是该工程的一级目录如下,每层之间的交互是用Block的形式来实现的 工程目录说明: 1.Request:文件夹下存储网络请求的类,下面会给出具体的实 ...

  6. iOS进阶之架构设计MVVM模式仿新闻项目(6)

    这是MVVM的第三篇文章了,之所以花这么多文章来介绍MVVM,就是为了加深对MVVM的理解,以及从不同demo的角度,对比分析那种是最适合自己的模式. 转自文章 iOS使用MVVM模式仿新闻项目 一. ...

  7. 猿题库 iOS 客户端架构设计-唐巧

    序 猿题库是一个拥有数千万用户的创业公司,从20013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代. 在如此快速的开发过程中,如何保证代码 ...

  8. 实践干货!猿题库 iOS 客户端架构设计

    序 猿题库是一个拥有数千万用户的创业公司,从2013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代.在如此快速的开发过程中,如何保证代码的质 ...

  9. 猿题库 iOS 客户端架构设计

    推荐序 我几周前写过一篇文章,叫 <被误解的 MVC 和被神化的 MVVM>,其中的很多思想是和本文的作者 Lancy 交流获得的.当时很多人回复问:能直接上猿题库的代码吗?这次 Lanc ...

最新文章

  1. 优先队列 堆实现 java
  2. Android开发之搜Ya项目说明(3)
  3. Keras之小众需求:自定义优化器
  4. php生产任务,php生产实用技能之计划任务(视频讲解)
  5. 多项式对数函数ln f(x)
  6. java存储过程示例_安全密码存储–请勿做的事和Java示例
  7. 不知道用什么图表展示数据?看这份图表选择指南就够了
  8. Smack+Openfire 接收和发送文件
  9. TxDragon的训练5
  10. Vue项目中的文件/文件夹命名规范
  11. maven gradle等三放jar包仓库
  12. 【游戏】基于 matlab GUI lanchester作战模拟设计【含Matlab源码 426期】
  13. lh服务器注册,登不进去的人请看这里:LH服无法登录问题官方解释
  14. 2013房价必然拉开大崩溃的序幕
  15. 河南省iscc2019线下(hnciscn)Misc
  16. 【Excel】乱序不同行数的两列数据对比匹配
  17. yxc_第一章 基础算法(一)
  18. 刚刚,优酷的模版引擎,竟然开源了!
  19. Linux迁移home目录到根目录的操作步骤
  20. 启发式与元启发式算法

热门文章

  1. Java架构-面试前必须知道的MySQL命令【explain】
  2. iOS - Regex 正则表达式
  3. 安装asp.net mvc4后mvc3项目编译报错
  4. 为什么很多人喜欢把软件装在D盘,而不是系统盘C
  5. 通过PRINT过程制作报表
  6. C#设计模式之享元模式(Flyweight)
  7. 阿里云服务器CentOS7版本yum方式安装mysql
  8. HDU 2079 选课时间
  9. 常用 Linux 命令
  10. CentOS 7下使用Gitolite搭建Git私服