首页
学习
活动
专区
圈层
工具
发布

聊聊iOS中的 MVC、MVP、MVVM以及 VIPER等代码组织方式

但是现实中我们的View依然跟Model耦合,因为如果完全按照这个理想化的MVC的话,View(cell)层的设置都应该在 Controller中,这样的话,Controller会更臃肿。...二、MVP“架构” MVC的缺点在于并没有区分`业务逻辑和业务展示`, 这对单元测试很不友好. MVP针对以上缺点做了优化, 它将业务逻辑和业务展示也做了一层隔离, 对应的就变成了MVCP....和MVP中负责业务逻辑的Presenter不同,VIPER的Presenter的主要工作是在View和Interactor之间传递事件, 并管理一些View的展示逻辑,主要的业务逻辑实现代码都放在了Interactor...总结 在简单了解了几种架构模式,对于那些让你困惑的问题,我希望你已经找到了答案。但是本文可能也存在错误之处,或者不足之处,希望大家看到有问题的地方在下方留言一起谈论学习,后续可能会持续更新更正本文。...参考文章: 设计框架(MVC、MVP、MVVM、VIPER)的演化说明总结 iOS VIPER架构实践(一):从MVC到MVVM到VIPER 深入分析MVC、MVP、MVVM、VIPER 浅谈开发中的

4.8K21

架构之路 (五) —— VIPER架构模式(一)

下面看下写作环境 Swift 5, iOS 13, Xcode 11 接着就是正文了。 VIPER架构模式是MVC或MVVM的另一种选择。...VIPER为这种情况提供了一种替代方案,可以与SwiftUI和Combine结合使用,帮助构建具有清晰架构的应用程序,该架构有效地分离了所需的不同功能和职责,如用户界面、业务逻辑、数据存储和网络。...在Entities组中,您将看到与数据模型相关的类。Trip和Waypoint稍后将作为VIPER架构的Entities。因此,它们只保存数据,不包含任何功能逻辑。...MVC (Model-View-Controller)是2010年iOS应用程序架构中最常使用的模式。...控制器Controller因视图逻辑和业务逻辑而膨胀。 MVVM是一种流行的体系结构,在View Model中它将视图逻辑与业务逻辑分离开来。视图模型与模型Model交互。

20.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    唯一可行的 iOS 架构

    MVC,MVP,VIPER,RIBLET,Clean Swift等。这样的文章有很多,它们的观点和架构截然不同。 我们的社区一直在争论哪种“模式”是最好的。但是问题是他们全都是狗屎。...我们将真正深入在这些架构中,并会发现我们犯的主要错误。 如果我告诉您,iOS 中只有一种可能的架构模式,甚至没有任何模式?你会怎么想呢?...“Interactor 是包含业务逻辑的类”。这有助于我们理解代码吗?它包含哪些业务逻辑?如果我有很多业务逻辑怎么办?...它甚至都不是 OOP,我认为这是具有 5 个文件的过程编程。 我认为,VIPER 是一个很大的错误。VIPER 证明我们还不了解 MVC。我的建议是忘记 VIPER,不要讨论它。...这个逻辑应该在 UIViewController 中吗?如果存在很多复杂的表示逻辑怎么办?除了复杂性之外,还存在测试问题。测试 UIViewController 类并不容易。

    1.7K20

    架构之路 (二) —— APP架构分析(一)

    回顾 上一篇主要讲述了苹果原生iOS框架的架构,这一篇我们就说一下如果自己要完成一个APP,需要如何去设计架构。...ViewModel专门做“显示逻辑”,并且用属性观察者做绑定,必要的时候用Notification。 在Swift中,ViewModel和Model推荐用Struct;Logic倾向于用class。...增加Logic类,负责业务逻辑,比如从网络取数据,修改数据库,检查用户名合法性,具体的响应逻辑,监听后的具体处理等等。 3. VIPER 任务均摊 – 毫无疑问,VIPER是任务划分中的佼佼者。...VIPER View: 也是View + Controller Present:相当于ViewModel,叫展示器 Interactor:交互器,侧重于业务逻辑;从网络取数据,数据库等功能都在这里...Entity:就是Model,仅仅是数据定义 WireFrame:就是Router,是页面跳转 参考文章 1. iOS应用架构谈 开篇 2.

    2.6K10

    iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

    ,这将会加载所有的View) 的情况下测试UIView中的显示逻辑(虽然在上面的例子中没有太多这样的逻辑)。...可测性 — 非常好,基于一个功能简单的View层,可以测试大多数业务逻辑 易用性 — 在我们上边不切实际的简单的例子中,代码量是MVC模式的2倍,但同时MVP的概念却非常清晰。...绑定 我在MVP部分已经提到这点了,但是在这里我们来继续讨论。 绑定是从OS X开发中衍生出来的,但是我们没有在iOS开发中使用它们。当然我们有KVO通知,但它们没有绑定方便。...VIPER 把LEGO架构经验迁移到iOS app的设计 VIPER是我们最后要介绍的,由于不是来自于MV(X)系列,它具备一定的趣味性。 到目前为止,你必须同意划分责任的粒度是很好的选择。...VIPER在责任划分层面进行了迭代,VIPER分为五个层次: 交互器(Interactor) — 包括关于数据和网络请求的业务逻辑,例如创建一个实体(Entities),或者从服务器中获取一些数据。

    2.2K20

    学习苹果iOS手机开发App的准备

    Python、Java、C++等语言的基础知识都有助于学习Swift语言。 Swift语言:这是iOS开发的首选语言。...资源和学习材料 官方文档:苹果提供详细的开发者文档,涵盖了从Swift语言到iOS框架的方方面面。...开源项目:参与一些开源项目或查看别人的代码,以此增长见识和经验。 6. 深入学习 架构模式:学习常见的iOS应用架构,如MVC、MVVM和VIPER。...实时了解行业动态 订阅博客和播客:如Ray Wenderlich、iOS Dev Weekly、Swift by Sundell等,有助于在学习过程中获取最新资讯和技巧。...阅读技术文章:Medium、Dev.to 以及各类技术博客上有许多iOS开发的相关文章和教程。 通过系统地学习和持续实践,不仅能掌握iOS开发的核心技能,还能应对开发过程中遇到的各种挑战。

    70310

    iOS应用架构谈 view层的组织和调用方案 pragma mark - life cyclepragma mark - life cyclepragma mark - getters and set

    制定View层规范的重要性在于: 提高业务方View层的可读性可维护性 防止业务代码对架构产生腐蚀 确保传承 保持架构发展的方向不轻易被不合理的意见所左右 在这一节里面我不打算从头开始定义一套规范...如果你还有点疑惑,请看下面我来详细讲一下原因。 为什么使用了派生,业务方的使用成本会提升? 其实不光是业务方的使用成本,架构的维护成本也会上升。那么具体的成本都来自于哪里呢?...我也是这样,在进安居客之前,我也是做服务端开发的,在学习iOS的过程中,我也曾经对iOS领域的MVC划分问题产生过疑惑,我疑惑的点就是前面开篇我猜测的点。...如果有人问我iOS中应该怎么做MVC的划分,我就会像上面这么回答。 MVCS 苹果自身就采用的是这种架构思路,从名字也能看出,也是基于MVC衍生出来的一套架构。...如果各位读者有谁在实际App中采用VIPER架构的或者对VIPER很有兴趣的,可以评论区里面提出来,我们交流一下。 本门心法 重剑无锋,大巧不工。

    1.2K80

    浅谈iOS架构的技能栈

    .需要读者自己使用百度进行拓展学习. 4.本文所表达观点并不是最终观点,还会更新,因为本人还在学习过程中,有什么遗漏或错误还望各位指出. 5.觉得哪里不妥请在评论留下建议~ 6.觉得还行的话就点个小心心鼓励下我吧...~ ---- 目录 1.技能栈路线 2.iOS架构说 3.大、中、小公司的区别 4.架构师思想 ---- 为什么我又会开一篇文章,而且又是大致一样的标题,因为我觉得这是不同层面的问题,不同层面的文章,上一篇可以说是我掌握的一些知识的分享...设计模式、接口设计、架构模式 设计模式是指,在实现业务逻辑时,代码逻辑的目标和实现模式,例如:MVP,MVVM,MVC等....、中、小型公司的区别 你会发现,随着你就业的公司规模变化,你进入的公司越大越知名,其公司内部的规范,要求,架构都会越来越成熟,逻辑性更明确,业务逻辑针对性更强....如果你只是单纯的使用语言完成业务需求,只思考自己的业务栈,那便是码农.但如果你去思考,怎么用,为什么用,怎么组合更好,那便是架构师思想了.以整个项目的开发观念去看待自己个人的业务逻辑如何实现,怎么实现更高效

    2.5K71

    iOS 面试策略之经验之谈-架构的选择

    好的架构确保了日后开发中可以轻松应对各种新需求;即使是新人也可以快速学习并适应现有的架构并进行开发。 本节将围绕目前流行的 MVC,MVP,MVCS,MVVM,VIPER 等架构来展开。...相比于 ViewController 的庞大代码,Model 层只是定义几个属性。在 Objective-C 的 “.m” 实现文件中,更是几乎看不到代码。 网络请求逻辑无从安放。...也就是说,View 层不包含任何的业务逻辑代码,它只会将交互交给 Presenter,并从 Presenter 那里接受结果来更新自己。...而 MVP 中的 Presenter 则负责业务逻辑,它是 View 和 Model 的桥接。它会根据 View 中的交互去修改 Model,或根据 Model 的变化去修改 View。...文章到这里就结束了,感谢你的观看,只是有些话想对读者们说说: iOS开发人群越来越少,说实在的,每次在后台看到一些读者的回应都觉得很欣慰,至少你们依然坚守iOS技术岗…为了感谢读者们,我想把我收藏的一些编程干货贡献给大家

    1.4K31

    打造完备的iOS组件化方案:如何面向接口进行模块解耦?

    作者 | 黑超熊猫zuik,一个修行中的 iOS 开发,喜欢搞点别人没搞过的东西,钻研过逆向工程、VIPER 架构和组件化。...关于组件化的探讨已经有不少了,在之前的文章 iOS VIPER架构实践(三):面向接口的路由设计[1] 中,综合比较了各种方案后,我倾向于使用面向接口的方式进行组件化。...Swift:条件扩展 Swift 中不支持宏定义,也不能随意进行类型转换,因此需要换一种方式来进行编译检查。...Swift 中没有直接提供class_conformsToProtocol这样的函数,不过我们可以通过 Swift Runtime 提供的标准函数和 Swift ABI 中定义的内存结构,完成同样的功能...例如 MVVM 和 VIPER 架构中,model 参数不能传给 view,而是应该交给 view model 或者 interactor。此时可以使用相同的模式。

    8.4K43

    浅谈iOS进阶路线

    . 4.本文所表达观点并不是最终观点,还会更新,因为本人还在学习过程中,有什么遗漏或错误还望各位指出. 5.觉得哪里不妥请在评论留下建议~ 6.觉得还行的话就点个小心心鼓励下我吧~ ---- 目录 1....,如果是我在进行iOS进阶过程中会去学习的知识点....当有新的业务需求提出时,根据自己的实力,给出不同的业务方案. 购物车 购物车可以说是在各个客户端,最经典的案例了,这是一个业务需求,也是涉及到增删改查,异步处理等各种业务逻辑混杂于一身的业务需求....、NSThread各种灵活运用和嵌套 ---- iOS架构 & 代码规范 iOS应用架构谈-By.Casa大 可以仔细学习这篇文章,养成良好的代码规范. ---- 苹果官方Kit ARKit....例如,客户端和服务器概念,SSH登录,以及各大有名的APP是如何架构的(推理一下). ---- iOS Swift Swift目前已经4.0了,个人感觉本人会在Swift5.0进行学习吧,虽然很多项目没有用到

    2.5K120

    帮助新人理顺iOS学习方式,教你避开90%新手坑!

    与闭包逻辑UlKitUIViewController生命周期与组件管理使用Storyboard快速构建界面(类比HTML+CSS)对比React/Vue的组件生命周期与状态管理MVC前端MVC模式与iOS...MVC的异同数据传递:从Model到View的逻辑分离架构扩展常用工具iOS常用debug工具对比Chrome inspectSwift语言核心特性类型安全、可选类型、协议与扩 展 值类型(结构体)与引...HTML+CSS)对比React/Vue的组件生命周期与状态管理MVC前端MVC模式与iOS MVC的异同数据传递:从Model到View的逻辑分离架构扩展常用工具iOS常用debug工具对比Chrome...架构升级:复杂应⽤问题根源:业务逻辑堆积在Controller,维护困难 优化⽅案:分层,职责进⼀步拆分 Service层:⽹络请求、数据缓存(类⽐前端API Service) ViewModel层(可选...):数据格式化,将业务逻辑抽取到独⽴类,减轻Controller负担// 前端类⽐:React Context或Props Drilling class UserViewController { let

    22010

    今日头条:iOS 架构设计杂谈

    阅读字数:2842 | 8分钟阅读 摘要 本次分享将探讨iOS中的架构设计,讲解工程设计的6大原则,通过一个简单登陆界面,一步步分析开发中的MVVM框架应用。...目前开发团队的人员越来越多,应用运营起来之后业务需求和功能需求日益增长,在没有良好的架构设计的情况下,维护起来会越发困难,因此架构设计是应用开发中不得不思考的问题。...MVVM案例 iOS MVVM实现方案 MVVM中最令我兴奋的是有ViewModel这个角色,因为ViewModel比苹果的MVC设计中的Controller更小,同时又能处理业务逻辑,当业务逻辑拆分的足够小和分散的时候...经过这样的设计整个App的层级结构已经初步成型,最底层是App功能,在此之上是App通用业务层,这块提供可以相互使用的组件、模块。再往上的iOS通用层中其实很多东西在iOS的其他开发上都能够用到。...整个过程中MVVM指导了UI与业务逻辑组件拆分,UI与业务逻辑的解耦使得不同APP间的登录功能有共用的组件,通过丰富的iOS通用层组件使绑定、网络请求、数据反序列化变得更容易实现。

    1.9K30

    iOS 组件化之路由设计思路分析

    前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高。为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构。...通过改进VIPER架构,吸收其优秀的特点,改进其缺点,就形成了Uber 骑手App的全新架构——Riblets(肋骨)。 ?...在这个新的架构中,即使是相似的逻辑也会被区分成很小很小,相互独立,可以单独进行测试的组件。每个组件都有非常明确的用途。...通过一个Riblets(肋骨)进一步的抽象业务逻辑和视图逻辑。 ? 一个Riblets(肋骨)被设计成这样,那和之前的VIPER和MVC有什么区别呢?最大的区别在路由上面。...总之,在业务没有完全固定下来之前,组件的划分可能一直进行时。 六. 最好的方案 ? 关于架构,我觉得抛开业务谈架构是没有意义的。因为架构是为了业务服务的,空谈架构只是一种理想的状态。

    3K60

    iOS 组件化 —— 路由设计思路分析

    前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高。为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,VIPER等复杂架构。...通过改进VIPER架构,吸收其优秀的特点,改进其缺点,就形成了Uber 骑手App的全新架构——Riblets(肋骨)。 ?...在这个新的架构中,即使是相似的逻辑也会被区分成很小很小,相互独立,可以单独进行测试的组件。每个组件都有非常明确的用途。...通过一个Riblets(肋骨)进一步的抽象业务逻辑和视图逻辑。 ? 一个Riblets(肋骨)被设计成这样,那和之前的VIPER和MVC有什么区别呢?最大的区别在路由上面。...总之,在业务没有完全固定下来之前,组件的划分可能一直进行时。 六. 最好的方案 关于架构,我觉得抛开业务谈架构是没有意义的。因为架构是为了业务服务的,空谈架构只是一种理想的状态。

    1.3K30

    别再说 Flutter 是唯一选择了——KMP 正在悄悄抢走它的地盘

    不够好,而是因为他说了一句话—— "我不想用另一套语言描述我的业务逻辑。"...KMP 的核心定位是:共享业务逻辑,UI 各平台自己来。 它的架构分层很清晰: 层次 Android iOS 共享?...这对于有严苛 UI 质量要求的 App(比如金融、医疗类)非常重要。 差异二:渐进式迁移是 KMP 的杀手锏 现实中很少有团队能从零起步,大多数面临的是"我有个跑了 3 年的 App,怎么引入跨端"。...实际落地建议:对于大多数有 Android 背景的团队,我推荐先用 KMP 共享数据层和业务逻辑层(网络、存储、领域模型),UI 层暂时不动。...先从共享业务逻辑层开始,是最稳妥的路径。 最后说一句 Flutter 和 KMP 不是非此即彼的关系,它们解决的是不同层次的问题。

    16410

    初学go,实现vue3前后端分离,放弃了.....

    go后端正如Java的Springboot、python的Django,这里我使用的是go的gin框架来构建后台,先来构建后台功能模块。...controller:后端控制器,负责处理请求和业务逻辑model:存放放后端模型,负责定义数据结构、数据库操作database:用于初始化数据库连接和定义数据库操作函数router:使用 Gin 框架提供的方法来定义路由...在对应的路由处理函数中,再调用业务逻辑处理函数或者操作数据库等config:用来定义数据库连接信息等配置前端后端分离替代了MVC架构中的view,所以这里就没有view模块,除了上面五个目录,还可以定义...github.com/spf13/viperviper用来解析各种格式的配置文件,GORM 是一个流行的 Go 语言 ORM(对象关系映射)库,直白说就是讲数据库中的表结构和代码中的类(结构体)映射起来...结果如下:src下的目录是用于开发的目录,assets用来存放静态文件,components是自定的一些组件,例如在BuildAdmin我写过的Icon组件,router就是来定义vue-router的

    2.1K10

    我在Uber亲历的最严重的工程灾难

    再加上团队提倡的“让开发者放手去干”的理念,我们的应用架构变得既复杂又脆弱。Uber 当时非常注重客户端逻辑,所以应用程序会出现很多问题。我们一直在做热修复,不断发布版本,设计的扩展性也变得很差。...架构团队希望在 Android 和 iOS 这两个平台上使用相同的架构模式。Android 团队都是 RxJava 的忠实粉丝,而 Swift 也有一个支持函数式编程的 RxSwift 库。...iOS 9 引入了新架构,可以把大小降到原来的一半。因为留给我们的时间只有一周了,所以我们决定放弃支持 iOS 8。...问题的持续存在和缓慢的开发环境在 Uber 的 iOS 工程师中形成了两个敌对派别,我称它们为“Swift 狂热派”和“Objective-C 顽固派”。外部的压力和内部的派系斗争让气氛变得高度紧张。...社区也从我们的经历中受益。Ellie 做了一个很棒的演示,并通过巡回演讲来分享我们的经验。我用我的经验去教其他团队如何做出更好的决策。

    85420

    如何写出一手好的小程序代码,从架构说起

    但是,有个限制是 Android 端比较自由,通过 V8 提供 plugin 机制可以这么做,而 IOS 上,苹果爸爸是不允许的,除非你用的是 IOS 原生组件,这样的话就会扯到同层渲染这个逻辑。...主要的原因有: · IOS 和 Android 对于 webview 的渲染逻辑不同 · 手机上性能瓶颈,JS 原始不适合高性能计算 · video 等特殊元素上不能被其他 div 覆盖 · …… 一开始做小程序的双线程架构和开发者工具比较类似...大体内容可以参考这张架构图: 当然,除了正常的执行逻辑的上述是三个架构体外,还有提供接口协议的类架构。...所以,这里的通信架构其实就变为: Native Layer 在 Native 中,可以通过一些手段能够在内核中设置 proxy,能很好的捕获用户在 UI 界面上触发的事件,这里由于涉及太深的原生知识,我就不过多介绍了...丰富的场景化DEMO 将实时音视频融入到各业务场景中,提供不同业务场景的Demo,帮助用户高效完成小程序开发。

    2.3K20
    领券