0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

iOS开发几个架构的对比

汽车玩家 来源:IT知识课堂 作者:IT知识课堂 2020-05-05 23:17 次阅读

iOS开发中苹果定义了一套MVC的软件架构。前几天,同事们聊起了MVC、MVP、MVVM等架构的区别。今天,我也来对此给出一些自己的理解。

MVC

基本MVC模式

如下图所示为基本的MVC(Model-View-Controller)模式结构图,可分为三部分:模型(Model)、视图(View)、控制器(Controller)。其在MVC模式中所扮演的角色分别为:

Model:模型管理应用程序的数据,响应有关其状态信息(通常来自View)的请求,并响应指令以更改状态(通常来自Controller)。

View:视图管理数据的展示。

Controller:控制器解释用户的输入,并通知模型、视图进行状态更新。

iOS开发几个架构的对比

其中,View和Controller依赖于Model,而Model并不依赖于View和Controller。这种设计模式的优点在于允许Model不受View的影响,从而能够进行独立的构建和测试。

此外,根据Model的具体实现还可以进一步分为:主动型Model、被动型Model。

被动型Model MVC模式

当只有一个Controller操控着Model时可以采用被动型Model。Controller定义Model,并在Model发生改变时通知View,后者再进行更新。在这种场景下,Model完全独立于View和Controller。实际上,被动型Model MVC模式就是基本的MVC模式。

主动型Model MVC模式

当Model的状态未受Controller干扰的情况下发生变化时,使用主动型Model。当其他来源正在更改数据并且必须立刻反应到View中时,可能会发生这种情况。

为了实现主动型Model,通常使用Observer模式来提供了一种机制来提醒其他对象的状态变化,避免引入依赖关系。各个View实现Observer接口并向Model注册。当Model发生变化时,Model会遍历所有注册的观察者并通知他们相关的变化。这种方法通常被称为“发布 - 订阅”。Model从不需要关于任何View的任何信息。事实上,在Controller需要被告知Model变化的情况下(例如,启用或禁用菜单选项),所有Controller必须通过实现Observer接口并订阅Model的变化。

iOS开发几个架构的对比

传统版MVC

上述主动型Model MVC模式通过加入Observer模式进行了改良。事实上,随着业务需求的变化,MVC模式通过不断加入一些更基本的设计模式采演化成现在经典的MVC模式。这些基本模式协同工作,定义了MVC应用程序特有的功能分离和通信路径。

iOS开发几个架构的对比

上图所示为传统MVC设计模式,其通过Composition、Strategy、Observer等基本设计模式协同工作以实现。用户操作在复合结构的某个层次上操作View,生成一个事件。Controller接收事件,并进行解释。这个过程使用Strategy模式实现,可以是通过消息请求一个Model对象来更新其状态或请求一个View对象来更新其行为或外观。Model对象则在其状态改变时通知所有已注册为观察者的对象。如果观察者是对象,则可以相应更新其外观。

苹果版MVC

苹果认为传统的MVC模式中,View通过Observer模式直接观察Model对象以获取相关的通知,而这样的设计会导致View和Model对象不能被广泛复用,因为View与其观察的Model之间存在耦合关系。因此,苹果版MVC与传统MVC基本一致,只是隔离了View和Model。

iOS开发几个架构的对比

在iOS中,UIViewController和UIView是一一对应的。随着业务的深入,MVC最终一点点变成了Massive-View-Controller。

iOS开发几个架构的对比

MVP

MVP(Modell-View-Presenter)模式就是为了解决MVC中Controller越来越臃肿的问题,进一步明确代码分工。MVP与苹果版MVC非常相似,但是它们的从属关系有所不同(实线表示持有)。如下图所示,MVP模式中View持有Presenter,Presenter持有Model,View不能直接访问Model;而MVC模式中Controller持有View和Model。

通过修改从属关系,可以真正意义上实现将UI逻辑和数据逻辑隔离,而隔离之后就可以方便地对数据逻辑部分进行单元测试。

iOS开发几个架构的对比

在iOS中,MVP的实现一般如下图所示。

iOS开发几个架构的对比

MVVM

MVVM(Model View View-Model)就是为了解决MVP中Presenter过于臃肿的问题。MVVM的思想是将Controller中UI控制逻辑与业务逻辑进行分离,并抽离出一个View-Model来完成UI控制的逻辑。而Controller只需要负责业务逻辑即可。如下图便是MVVM的结构图。

iOS开发几个架构的对比

通常,View-Model可以调用Model定义的方法,从Model中获取数据以用于View,并对数据进行预处理,使View可以直接使用。View又可以向View-Model发出用户的操作命令,从而更改Model。MVVM实现了一种双向绑定机制。

在iOS中,MVVM的实现一般如下图所示。

iOS开发几个架构的对比

MVVM的优点在于:降低了View和Model之间的耦合;分离了业务逻辑和视图逻辑。缺点在于:View和Model双向绑定导致bug难以定位,两者中的任何一方出现问题,另一方也会出现问题;增加了胶水代码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • iOS
    iOS
    +关注

    关注

    8

    文章

    3395

    浏览量

    150788
  • 架构
    +关注

    关注

    1

    文章

    516

    浏览量

    25499
收藏 人收藏

    评论

    相关推荐

    【迅为电子】i.MX6UL和i.MX6ULL芯片区别与开发对比

    【迅为电子】i.MX6UL和i.MX6ULL芯片区别与开发对比
    的头像 发表于 11-28 14:31 483次阅读
    【迅为电子】i.MX6UL和i.MX6ULL芯片区别与<b class='flag-5'>开发</b>板<b class='flag-5'>对比</b>

    Llama 3 模型与其他AI工具对比

    Llama 3模型与其他AI工具的对比可以从多个维度进行,包括但不限于技术架构、性能表现、应用场景、定制化能力、开源与成本等方面。以下是对Llama 3模型与其他一些主流AI工具的对比分析: 一
    的头像 发表于 10-27 14:37 439次阅读

    risc-v与esp32架构对比分析

    RISC-V与ESP32在架构上存在显著的差异,这些差异主要体现在处理器类型、设计原则、功能特性以及应用场景等方面。以下是对两者架构的详细对比分析: 一、处理器类型与设计原则 RISC-V : 类型
    发表于 09-26 08:40

    IOS12以上搜索不到蓝牙是怎么回事?

    现在是这样的,IOS12以下测试能够搜索到设备蓝牙。但是IOS12以上就都搜索不到。 是什么原因呢?
    发表于 07-02 08:03

    配对过IOS13.5的手机无法连接删除绑定信息的esp32蓝牙,怎么解决?

    你好,我的IDF版本是4.1,手机是IOS13.5版本的,APP是nRF Connect。 当IOS手机配对连接esp32蓝牙成功后,把esp32本地存储的蓝牙绑定信息删除掉,IOS手机就没办法再次
    发表于 06-25 07:56

    全光网络与传统网络架构对比分析

    随着信息技术的飞速发展,网络已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代,全光网络和传统网络架构作为两种主流的网络技术,各有其特点和适用范围。本文将对这两种网络架构进行详细的对比
    的头像 发表于 06-07 10:45 1357次阅读
    全光网络与传统网络<b class='flag-5'>架构</b>的<b class='flag-5'>对比</b>分析

    RISC-V的MCU与ARM对比

    RISC-V的MCU与ARM在多个方面存在显著的区别,以下是两者的对比: 开源与专有 RISC-V :RISC-V是一种开源的指令集架构(ISA),允许任何人免费使用、修改和贡献RISC-V的指令集
    发表于 05-27 15:58

    鸿蒙ArkUI-X跨平台开发:【bility开发说明(iOS端)】

    本文介绍将ArkUI框架扩展到iOS平台所需要的必要类及其使用说明,开发者基于OpenHarmony,可复用大部分的应用代码(生命周期等)并可以部署到iOS平台,降低跨平台应用开发成本
    的头像 发表于 05-21 14:35 932次阅读
    鸿蒙ArkUI-X跨平台<b class='flag-5'>开发</b>:【bility<b class='flag-5'>开发</b>说明(<b class='flag-5'>iOS</b>端)】

    iOS 16.7.8 RC版上线,推荐注册开发者计划升级预览版

    值得注意的是,自iOS/iPadOS 16.4开发者预览版Beta 1起,须先注册成为苹果开发者,然后通过系统【设置】【软件更新】查看升级选项。
    的头像 发表于 05-08 11:30 2083次阅读

    用stm32+esp8266做开发遇到的几个疑问求解

    最近在用stm32+esp8266做开发,遇到问题,开发中遇到同类情况的,一起讨论一下! 1、设备作为server建立热点后,不管是什么终端(ios、安卓端、pc),很难找到该热点;或者找到后
    发表于 04-29 06:59

    超融合架构解决方案

    的特点、与传统架构对比以及超融合架构方案的价值。 一、超融合架构是什么? 超融合架构(Hyper-Converged Infrastruc
    的头像 发表于 04-10 14:57 669次阅读

    iOS 17.4 &amp; iPadOS 17.4 开发者将可控制“表情反应”默认行为

    苹果公司在iOS 17.4及iPadOS 17.4的RC版开发者文档中明确规定:“开发者可以使用特定代码[…]以实现‘表情反应’功能的设定。然而,最终决定权取决于用户自主选择,而非应用程序预先设定。”
    的头像 发表于 02-28 13:56 660次阅读

    架构开发与优化咨询和实施服务

    得益于硬件平台算力的提升,汽车电子电气架构的集成度逐渐提高,多域融合成为了目前行业中软件工程的重要工作内容。经纬恒润可以为汽车电子和软件工程师在开发软件架构过程中提供:既有软件设计梳理与建模、
    的头像 发表于 02-05 14:26 402次阅读
    <b class='flag-5'>架构</b><b class='flag-5'>开发</b>与优化咨询和实施服务

    【RISC-V开放架构设计之道|阅读体验】一本别出心裁的RISC-V架构之书(第一章)

    的计算机体系架构专 别出心裁地按照RISC-V模块化的指令来组织内容 对比x86、ARM 和MIPS 的设计,通过对比分析,突显RISC-V 的优势 可以作为从业者随时翻阅的案头参考书 开头的蒙娜丽莎像让
    发表于 01-24 19:06

    国内有哪些典型的risc-v架构的芯片?

    国内如今比较流行的芯片中,能举几个这种架构的芯片吗?谢谢。
    发表于 01-21 22:16