MVC

刚接触iOS开发时,就知道Apple公司为我们提供了MVC模式,并且SDK设计也告诉我们应该搭配MVC使用。所以每一个人都应该掌握这种模式,那么,什么是MVC了?

被误解的MVC

根据MVC关系图,我们就理所当然的认为,MVC设计模式就是对应的Modle、View、Controller三个类,最终的结构就是,大量的业务逻辑写在了Controller中,Controller变得越来越臃肿,难以维护。

那MVC就真的是那样吗?

正确理解MVC

MVC核心是Presentation与Domain的强分离,也是GUI程序开发的原则。

MVC是一套模式,而不仅仅是三个类,你更应该按照Presentation和Domain关系来创建类。其中包括View/ViewCotroller、 Presentation Model 和 DomainModel 等。

Presentation与Domain关系

MVVM

MVVM是将传统的MVC中Controller业务逻辑代码单独提出来.

表示和业务部分使用响应性绑定相互通信,它们分别称为 View 和 ViewModel。在 iOS 中,通常会使用 ReactiveCocoa,RxSwift 或现代的 Combine 框架进行响应性绑定,它们通常位于 ViewModel 类中,并且也由 ViewController 通过协议使用。在与 Services 或 Domain Model 进行通信的一部分中,MVP 并没有太大的区别,但人们可能更喜欢在这里使用绑定或响应性事件

配合RxSwift使用时,VM中应该具备能直接绑定View的功能。

参考文档

唯一可行的iOS架构:探讨对于MVC的误解,和应该怎么理解。

iOS App的最佳架构存在吗?:针对唯一可行的iOS架构作出评论,解释没有其他设计模式存在的合理性。

正确的理解iOS MVC相关推荐

  1. iOS 开发:彻底理解 iOS 内存管理(MRC 篇)

    本文首发于我的个人博客:「程序员充电站」 文章链接:「传送门」 本文更新时间:2021年08月17日17:11:59 本文是 「iOS 开发:彻底理解 iOS 内存管理」系列的「MRC 篇」. 用来对 ...

  2. iOS——MVC设计模式

    什么是MVC MVC是Model-View-Controller的简写,它表示的是一种常见的客户端软件开发框架.可见他是由三个部分组成的. 下面解释一下这三个部分: Model:即为模型,用来存储业务 ...

  3. 深入理解 iOS 开发中的锁

    深入理解 iOS 开发中的锁 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知 ...

  4. 【MySQL笔记】正确的理解MySQL的MVCC及实现原理

    MVCC多版本并发控制 如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里 !首先声明,MySQL 的测试环境是 5.7 前提概要 什么是 MVCC 什么是当前读和快照读 ...

  5. iOS MVC 介绍

    所有的 iOS 应用程序基本都使用 Model-View-Controller,或称为 MVC 架构.  从架构角 度来看,Model,view 和 controller 是一个 iOS 应用程序的 ...

  6. 理解 iOS 和 macOS 的内存管理

    在 iOS 和 macOS 应用的开发中,无论是使用 Objective-C 还是使用 swift 都是通过引用计数策略来进行内存管理的,但是在日常开发中80%(这里,我瞎说的,8020 原则嘛?)以 ...

  7. OC 知识:彻底理解 iOS 内存管理(MRC、ARC)

    1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的 ...

  8. iOS - MVC框架

    要点: 1.  什么是MVC? 2. 了解Cocoa的伪MVC本质 MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controll ...

  9. iOS MVC设计模式

    说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实 ...

最新文章

  1. Windows和Linux的编译理解
  2. Tomcat在Linux上的安装与配置
  3. PYTHON字典dictionary用法laurentluce技术博客
  4. 005_Ajax get请求获取XML响应
  5. SpringBoot+Thymeleaf+Jquery实现模态框的显示与数据填充
  6. ubuntu修改pip的官方源为豆瓣源
  7. ASP.NET Core 3.0 gRPC 双向流
  8. ssh 介绍 和使用 程序不挂起
  9. QNAP 提醒客户注意 eCh0raix 勒索攻击和 Room Server 0day
  10. 网站流量预测任务第一名解决方案:从GRU模型到代码详解时序预测
  11. 第三季-第13课-无名管道通讯编程
  12. JAVA关于MD5加盐加密算法
  13. 从阿里投资B站看动漫IP,二次元市场蕴含了怎样的价值?
  14. 三角函数π/2转化_高中诱导公式全集,有了它,三角函数公式一网打尽
  15. oeasy教您玩转python - 008 - # ascii码表
  16. IT名人博客推荐(15个)
  17. URL中带特殊字符的处理方式
  18. 密西西比河谷州立大学:Android应用程序开发(四)
  19. 传奇关于首饰盒装备系统“十二生肖”“五行八卦”等脚本实例
  20. Python3 pd.dataframe写入csv和xlsx

热门文章

  1. jenkins页面中英文切换配置
  2. with(nolock)的用法
  3. 开启mysql远程访问的权限
  4. 微信小程序---系统信息-位置信息-定位信息
  5. Vaughn Vernon谈当今软件开发所面临的挑战
  6. netty tcp 字节有序-gt;对象有序
  7. rhel6.3挂载HP-EVA6400磁阵--linux端操作流程
  8. SQL - SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)[转]...
  9. Ubuntu Server 16.04服务器版配置图解教程06 - 安装MySql
  10. 匿名函数的this指向为什么是window?