首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

但是现实中我们的View依然跟Model耦合,因为如果完全按照这个理想化的MVC的话,View(cell)层的设置都应该在 Controller中,这样的话,Controller会更臃肿。...在 MVP 中,Presenter 可以理解为松散的控制器,其中包含了视图的 UI 业务逻辑, 所有从视图发出的事件,都会通过代理给 Presenter 进行处理; 同时,Presenter 也通过视图暴露的接口与其进行通信...和MVC中的一样,提供数据模型 这个流程看起来确实很像 Apple 的 理想化的MVC,它的名字是 MVP(被动变化的 View)。...Apple 的 MVC 实际上是 MVP 吗?...各部分遵循单一职责,可以很明确地知道新的代码应该放在哪里。 * 隔离程度高,耦合程度低。一个模块的代码不容易影响到另一个模块。 * 易于团队合作。

4.3K21

唯一可行的 iOS 架构

但是您应该知道,在原始 MVC 中, Controller 和 View 都具有图形表示。 总而言之,原始 MVC 应该看起来像这样: ? 这适用于iOS吗? 当然可以!...通常,它也适用于 iOS,甚至包含 UIView 和 UIViewController 的 iOS SDK。但是我们应该知道,这种分离与原始 MVC 有一些区别。...“Interactor 是包含业务逻辑的类”。这有助于我们理解代码吗?它包含哪些业务逻辑?如果我有很多业务逻辑怎么办?...这个逻辑应该在 UIViewController 中吗?如果存在很多复杂的表示逻辑怎么办?除了复杂性之外,还存在测试问题。测试 UIViewController 类并不容易。...好了,在这种情况下,我们将根据 MVC 原理将表示和业务逻辑混合在一个不好的类中。很难理解为什么有此代码。我们看不到该代码是针对哪个具体视图编写的。最后,很难在不同的屏幕上重用此模型。

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

    PureMVC--一款多平台MVC框架

    但是传统MVC模式真的那么完美吗? 传统MVC的痛点 让我们一个个来说。 Controller:控制器,包含了项目的业务逻辑。...所以关于传统MVC的第一个痛点就是,Controller过于臃肿。 Model:模型,包含了项目的数据模型。...视图本身没有什么好被大家诟病的,但是由于MVC中对于View和Controller界限的模糊界定造成了使用者在写代码的时候会觉得这部分代码放在View或者Controller里都可以的情况。...域逻辑 指的是仅仅是针对数据模型的操作,不论是对于客户端还是对于服务端,不论是同步的操作还是异步的操作。 因此,业务逻辑理所当然应该放在Command里来完成,而域逻辑应当放在Proxy里完成。...Proxy负责域逻辑,DataObject负责数据模型 PureMVC中,与域相关的逻辑和接口由Proxy来负责,后续的添加和修改接口只在Proxy中完成。

    1.6K30

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

    相比于 ViewController 的庞大代码,Model 层只是定义几个属性。在 Objective-C 的 “.m” 实现文件中,更是几乎看不到代码。 网络请求逻辑无从安放。...也就是说,View 层不包含任何的业务逻辑代码,它只会将交互交给 Presenter,并从 Presenter 那里接受结果来更新自己。...注意 ViewModel 类中绝对不能包含视图层的任何类或结构体。MVVM 的示意图如下: [image] 6. 试比较 MVC,MVP,MVVM 三种架构。...但理论上来说,MVC 是希望视图层就是单纯的 UIView,或者 UIViewController 只负责 UI 更新交互,不涉及业务逻辑和模型更新。...实际上之前中间层和模型层的一些逻辑被进一步剥离至此,整个架构的逻辑也显得更加清晰。 模型层(Entity)。只拥有初始化方法和属性相关 set/get 方法,与之前的 Model 大同小异。

    1K30

    被误解的 MVC 和被神化的 MVVM(一)

    MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写。...现在,MVC 已经成为主流的客户端编程框架,在 iOS 开发中,系统为我们实现好了公共的视图类:UIView,和控制器类:UIViewController。...在我看来,Controller 里面就只应该存放这些不能复用的代码,这些代码包括: 在初始化时,构造相应的 View 和 Model。...将数据获取和转换的逻辑分别到另外一个类中。 将拼装控件的逻辑,分离到另外一个类中。 你想明白了吗?其实 MVC 虽然只有三层,但是它并没有限制你只能有三层。...这部分代码从 Controller 中剥离出来后,不但简化了 Controller 中的逻辑,也达到了网络层的代码复用的效果。

    34920

    浅谈MVC

    之前也把MVC往asp.net开发上靠过,试着去解耦各层的依赖,但是终究扯不清楚。MVC,也就是把系统设计分三层:数据模型、显示视图、逻辑控制器。...这样一说,Web开发中的MVC应该就比较好理解了。 那么移动开发中的MVC呢?个人喜欢比较学习法,在学习IOS开发的MVC运用时,总是不由自主地拿去跟Web开发中的MVC模式做比较。...相较web开发,IOS中的MVC思想运用得更直接、更彻底。...不过此法也有需要注意的地方:1、各个子View一定要跟ViewController中的子View属性或变量用连接线连接起来;2、还是没法包含太多子View(当然,对于移动开发而言,貌似也不应该包含太多子...结语:因为IOS开发还只能算个新手,所以MVC目前进境也就到此了,欢迎高人不吝指教。 似乎忘记谈谈MVC与Web开发中常用的三层架构模型的区别与关系了。

    95020

    iOS面试题:MVVM和MVC的区别

    MVVM和MVC的区别 1. MVC MVC的弊端 厚重的View Controller M:模型model的对象通常非常的简单。根据Apple的文档,model应包括数据和操作数据的业务逻辑。...业务逻辑很明显不归入view,视图本身没有任何业务。 C:控制器controller。Controller是app的“胶水代码”:协调模型和视图之间的所有交互。...都不能直接引用model,而是引用视图模型(viewModel) viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码的地方 使用MVVM会轻微的增加代码量,但总体上减少了代码的复杂性...总结 MVC的设计模式也并非是病入膏肓,无药可救的架构,最起码目前MVC设计模式仍旧是iOS开发的主流框架,存在即合理。...在新技术的面前,不盲从,也不守旧,一切的决策都应该建立在认真分析的基础上,这样才能应对技术的变化。 *** 更多:iOS面试题合集

    1.4K30

    聊聊iOS开发里的MVC模式

    终于要抽出一部分时间来重构这个项目,首先是整个项目的结构和代码逻辑不太符合MVC,又顺便了解了一下iOS里的MVC模式的概念。...首先MVC模式不光定义了每一部分在整个应用中扮演的角色,也定义了各个部分相互沟通交流的方式。...Model Model层对象应该是封装了一定的数据规范,并且定义了管理和处理这些数据的逻辑和计算。简单说就是Model对象不仅定义了数据结构,还要包括对数据结构的操作和处理逻辑。...其实Model里是包含业务逻辑的,这一点和Web开发差异很大,之前在用Java开发Web程序时使用MVC,M就是POJO,只包括定义数据结构,不包含对这些数据的处理(处理的部分放在一个叫Service层里...相对应的充血模型就类似这里的M,是包含对数据的操作和处理,ROR里的ActiveRecord就是这样的。

    53730

    论MVVM伪框架结构和MVC中M的实现机制

    对了就叫视图模型层VM吧!视图模型层中的类定义了一个给外部使用的唯一接口来供C层调用。这样我终于把一大部分代码从C层中抽离出来了。我已经成功的实现了C层的进一步瘦身,并抽象出了一个视图模型层了!...至于复杂的业务逻辑也完全可以通过拆分为多个子视图控制器或者多个Fragment 来完成。请问如果一个设计的足够好的C层,何来膨胀这么一说! 首先要正确的理解MVC中的M是什么?他是数据模型吗?...所以说MVVM里面的所谓对M层的定义就是一个伪概念。 上面我已经说明M层是业务模型层而非数据模型层,业务模型层应该封装所有的业务逻辑的实现,并且和具体视图无关。...优秀的应用和框架并不在代码的多寡,而是整体系统的代码简单易读,各部分职责分明,容易维护的调试 ------ MVVM被引入的根本原因是对M层的错误认识所引起的 ------ MVC中M层实现的准则 说了那么多...因为有可能我们的处理中不管成功还是失败都可能有部分代码是相似的,如果分开则会出现重复代码的问题。 MVC中M层实现的简单举例 最后我们以一个简单的用户体系的登录系统来实现一个M层。

    81130

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

    你甚至听到有人说MVC全称应该改为Massive View Controller(大量的视图控制器)。此外,为View controller减负也成为iOS开发者面临的一个重要话题。...易用性 — 相比于其他模式代码量最少。此外,每个人都熟悉它,即使经验不太丰富的开发人员也能够维护它。 如果你不愿意在项目的架构上投入太多的时间,那么Cocoa MVC 就是你应该选择的模式。...可测性 — 非常好,基于一个功能简单的View层,可以测试大多数业务逻辑 易用性 — 在我们上边不切实际的简单的例子中,代码量是MVC模式的2倍,但同时MVP的概念却非常清晰。...iOS 中的MVP意味着可测试性强、代码量大。...展示器(Presenter) — 包含UI层面(但UIKit独立)的业务逻辑以及在交互器(Interactor)层面的方法调用。

    1.4K20

    iOS14开发-MVC与Xcode快捷键

    MVC MVC:Model-View-Controller(模型-视图-控制器),是 iOS 开发中频繁使用的一种设计模式。 Model 负责维护和处理数据,如网络连接,数据计算与存储等。...除了 View 和 Controller 以外的所有内容都应该包含在 Model 中。...View 应该尽可能地不含业务逻辑。(绘图视图) Controller 具有对 Model 和 View 的引用,并监听 Model 的更改。...Controller 接收用户的输入,然后请求 Model 处理,并在检测到对 Model 的更改时及时更新 View。(接受用户输入并连接视图和模型) ? MVC.png 经典图 ?...MVC项目结构.png 优点 代码得以复用。 代码易于扩展。 代码易于维护。 缺点 增加了系统结构和实现的复杂性。 View 对 Model 的访问效率便低。

    54120

    一篇可能会让你爱上MVVM与ReactiveCocoa的文章

    ,您可能需要先阅读下第一篇文章: 写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景 Apple本身的UIKit框架是为MVC模式设计的,所以你在无形之中写就的代码其实就是...MVC,而且你甚至会觉得代码就应该这么写,不这么写还能怎么写?!...有些像.MVVM中,要求Model更薄,最好只存储原始数据信息;而对于其他的设计到逻辑的代码,建议都放到ViewModel中.你可能会说,这样ViewModel 会不会很乱呢?...中,而且你的ViewModel不仅这个控制器可以用,其他的控制器也可以用.虽然从单个控制器的逻辑代码量来看,优化不是很显著,但是ViewModel的模块化特性,将在涉及到页面复用以及后期维护时,让人感觉心旷神怡...View部分,在此我就暂时不用RAC中的写法来替代block,代理等,尽可能地在MVC的代码上,适当修正,以证明二者的某种程度上的协同作用.

    1.3K60

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

    阅读字数:2842 | 8分钟阅读 摘要 本次分享将探讨iOS中的架构设计,讲解工程设计的6大原则,通过一个简单登陆界面,一步步分析开发中的MVVM框架应用。...单一功能原则,不要考虑在模块内实现与它不相关的功能,比如在一个类中既要处理string MD5又要处理图片的解压缩,这就是明显的违反单一功能原则的例子。再往细说,其实在方法内也不应该处理过多的事情。...MVVM案例 iOS MVVM实现方案 MVVM中最令我兴奋的是有ViewModel这个角色,因为ViewModel比苹果的MVC设计中的Controller更小,同时又能处理业务逻辑,当业务逻辑拆分的足够小和分散的时候...经过这样的设计整个App的层级结构已经初步成型,最底层是App功能,在此之上是App通用业务层,这块提供可以相互使用的组件、模块。再往上的iOS通用层中其实很多东西在iOS的其他开发上都能够用到。...整个过程中MVVM指导了UI与业务逻辑组件拆分,UI与业务逻辑的解耦使得不同APP间的登录功能有共用的组件,通过丰富的iOS通用层组件使绑定、网络请求、数据反序列化变得更容易实现。

    1.7K30

    经典软件架构模式(完)

    而MVC模式的实现代码也因为需要复杂的事件机制甚至依赖语言的反射机制,所以性能也不能算非常好。相比之下,微核模式能更接近基本底层代码,其性能表现要好的多。...不过我们这个案例的需求非常明显,分层模式的功能太弱了,应该有更好的选择。由于我们需要有“复杂的交互的操作”,所以MVC模式应该是值得考虑的一个。...在内容管理器内,包含了一个网站内容的内部复杂逻辑关系,因此要提供方便的软件工具给策划人员,最好是用MVC模式来实现。...在编辑对于网站页面内容需求的变化中,我们可以根据MVC的原则,不断修正和增加内容管理器的功能。而核心的数据逻辑部分,则会较少需要修改,这样可以提供给编辑人员更自由的内容创作空间。...这些特性的修改完全无需修改任何业务逻辑代码。 ? MVC模式中,在工具类库上支持的最彻底的莫过于苹果的iOS界面类库,他直接把整个UI类库都按MVC模式来设计。

    2.3K30

    第一章 Web MVC简介 —— 跟开涛学SpringMVC

    Web MVC简介 1.1、Web开发中的请求-响应模型: ?...1.2、标准MVC模型概述 MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离。如图1-2 ?...图1-2 首先让我们了解下MVC(Model-View-Controller)三元组的概念: Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean...Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如...轻薄的web表现层:     做的事情越少越好,薄薄的,不应该包含无关代码;        只负责收集并组织参数到模型对象,启动业务对象的调用;        控制器只返回逻辑视图名并由相应的应用控制器来选择具体使用的视图策略

    98110

    MVPMVCMVVM

    MVC 1.即Model、View、Controller即模型、视图、控制器。...三个大模块的MVC也可以用于快速构建相似的业务场景(大模块的复用比小模块会差一些, 下文我会说明). 2.代码臃肿: 因为Scene大部分的逻辑和布局都转移到了相应的MVC中, 我们仅仅是拼装MVC的便构建了两个不同的业务场景...在 MVP 中,Presenter 可以理解为松散的控制器,其中包含了视图的 UI 业务逻辑,所有从视图发出的事件,都会通过代理给 Presenter 进行处理;同时,Presenter 也通过视图暴露的接口与其进行通信...2.便于代码的移植 比如iOS里面有iPhone版本和iPad版本,除了交互展示不一样外,业务逻辑的model是一致的。这样,我们就可以以很小的代价去开发另一个app。...可能重写的方法比较多,因为涉及到一些数据的转换以及和controller之间的通信。 2.调用复杂度增加 由于数据都是从viewModel来,想想突然来了一个新人,一看代码,不知道真实的模型是谁。

    49720

    业务开发常用的基于贫血模型的MVC架构违背OOP吗?

    从代码中,我们可以发现,UserBo 是一个纯粹的数据结构,只包含数据,不包含任何业务逻辑。业务逻辑集中在 UserService 中。我们通过 UserService 来操作 UserBo。...在基于贫血模型的传统开发模式中,Service 层包含 Service 类和 BO 类两部分,BO 是贫血模型,只包含数据,不包含具体的业务逻辑。业务逻辑集中在 Service 类中。...你可能会有一些疑问,这两种开发模式,落实到代码层面,区别不就是一个将业务逻辑放到 Service 类中,一个将业务逻辑放到 Domain 领域模型中吗?...实际上,除了我们能看到的代码层面的区别之外(一个业务逻辑放到 Service 层,一个放到领域模型中),还有一个非常重要的区别,那就是两种不同的开发模式会导致不同的开发流程。...我们知道,越复杂的系统,对代码的复用性、易维护性要求就越高,我们就越应该花更多的时间和精力在前期设计上。

    78841

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

    在这里我想讨论的是,在设计View架构时,如果为了能够达到统一设置或执行统一逻辑的目的,使用派生的手段是有必要的吗? 我觉得没有必要,为什么没有必要?...我也是这样,在进安居客之前,我也是做服务端开发的,在学习iOS的过程中,我也曾经对iOS领域的MVC划分问题产生过疑惑,我疑惑的点就是前面开篇我猜测的点。...如果有人问我iOS中应该怎么做MVC的划分,我就会像上面这么回答。 MVCS 苹果自身就采用的是这种架构思路,从名字也能看出,也是基于MVC衍生出来的一套架构。...在iOS领域大部分MVVM架构都会使用ReactiveCocoa,但是使用ReactiveCocoa的iOS应用就是基于MVVM架构的吗?...在实际iOS应用架构中,MVVM应该出现在了大部分创业公司或者老牌公司新App的iOS应用架构图中,据我所知易宝支付旗下的某个iOS应用就整体采用了MVVM架构,他们抽出了一个Action层来装各种ViewModel

    97780

    Web 开发选 MVC 还是 DDD?

    什么是 MVC、什么是 DDD MVC 三层架构中的 M 表示 Model,V 表示 View,C 表示 Controller。它将整个项目分为三层:展示层、逻辑层、数据层。...因为业务比较简单,即便我们使用 DDD,那模型本身包含的业务逻辑也并不会很多,设计出来的领域模型也会比较单薄,跟 MVC 差不多,没有太大意义。...你可能会问,DDD 不就是把部分数据的操作放在了模型里面吗,为什么就适合复杂的业务呢? 不夸张地讲,MVC 模式的开发,大部分都是 SQL 驱动(SQL-Driven)的开发模式。...而 SQL 语句是不能复用的,新接口开发即使有部分相同的逻辑,也只能重新编写视图函数。 而 DDD 开发模式下,我们需要事先理清楚所有的业务,定义领域模型所包含的属性和方法。...领域模型相当于可复用的业务中间层。新功能需求的开发,都基于之前定义好的这些领域模型来完成。越复杂的系统,对代码的复用性、易维护性要求就越高,我们就越应该花更多的时间和精力在前期设计上。

    2.1K10
    领券