美文网首页
iOS架构探索:MVC-MVP-MVVM

iOS架构探索:MVC-MVP-MVVM

作者: 程序员进阶 | 来源:发表于2021-08-27 20:37 被阅读0次

传统的MVC

传统的MVC

传统的M(Model)V(View)C(Controller)架构

优势:易于上手

劣势:三个实体是紧耦合的,每个实体和其他两个通信。这大大降低了可重用性。

“cell.model = model;”这句类似的代码有问题,cell中不应该引入model,要实现cell与model的解耦合。

苹果的MVC

苹果的MVC


Controller是View和Model之间的中介,这样他们三者就解耦了。

Controller过重,为View Controller减负也成为iOS开发者面临的一个重要话题。

缺点:并没有区分业务逻辑和业务展示, 这对单元测试很不友好。

MVP    Model View Presenter(模型 视图 协调器)

MVP

MVC的缺点在于并没有区分业务逻辑和业务展示, 这对单元测试很不友好。而MVP针对以上缺点做了优化, 它将业务逻辑和业务展示也做了一层隔离, 对应的就变成了MVCP. M和V功能不变, 原来的C现在只负责业务展示(也就可以说VC就是V), 而所有的逻辑全都转移到了P层。

优势:相对MVC来说,对C层进行减负,增加了P层。

劣势:View更新,需要通过代理通知P,P又需要通过代理通知VC。

MVVM

MVVM

结合这张图,我们可以看出:当View|Controller有用户交互,就通过响应告诉ViewModel,然后Model改变,而ViewModel会监听到Model的改变然后通过Success回掉来更新UI

MVVM 的基本概念

在MVVM 中,view 和 view controller正式联系在一起,我们把它们视为一个组件

view 和 view controller 都不能直接引用model,而是引用视图模型(viewModel)

viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码的地方

使用MVVM会轻微的增加代码量,但总体上减少了代码的复杂性

MVVM 的注意事项

view 引用viewModel ,但反过来不行(即不要在viewModel中引入#import UIKit.h,任何视图本身的引用都不应该放在viewModel中)(PS:基本要求,必须满足)

viewModel 引用model,但反过来不行

优势:低耦合、方便测试、可重用性:

低耦合:View 可以独立于Model变化和修改,一个 viewModel 可以绑定到不同的 View 上

可重用性:可以把一些视图逻辑放在一个 viewModel里面,让很多 view 重用这段视图逻辑

独立开发:开发人员可以专注于业务逻辑和数据的开发 viewModel,设计人员可以专注于页面设计

可测试:通常界面是比较难于测试的,而 MVVM 模式可以针对 viewModel来进行测试

劣势:block反向传值很方便,正向传值比较麻烦,所以一般结合RAC或RXSwift。

数据绑定使得Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。

对于过大的项目,数据绑定和数据转化需要花费更多的内存(成本)。主要成本在于:

数组内容的转化成本较高:数组里面每项都要转化成Item对象,如果Item对象中还有类似数组,就很头疼。

转化之后的数据在大部分情况是不能直接被展示的,为了能够被展示,还需要第二次转化。

只有在API返回的数据高度标准化时,这些对象原型(Item)的可复用程度才高,否则容易出现类型爆炸,提高维护成本。

调试时通过对象原型查看数据内容不如直接通过NSDictionary/NSArray直观。

同一API的数据被不同View展示时,难以控制数据转化的代码,它们有可能会散落在任何需要的地方。

参考了

iOS 从MVC到MVP

iOS 从MVP到MVVM

还有一些路由模式

1、路由(蘑菇街)

2、target-action(CTMeditor)

3、beehive(阿里巴巴)

相关文章

  • iOS架构探索:MVC-MVP-MVVM

    MVC 传统的M(Model)V(View)C(Controller)架构 优势:易于上手 劣势:三个实体是紧耦合...

  • iOS有关架构组件化的文章链接

    iOS应用架构谈 组件化方案 iOS 组件化方案探索 iOS移动端架构的那些事 如何优雅的实现界面跳转 之 统跳协...

  • iOS架构

    这里说几个概念:iOS系统框架:iOS系统架构:iOS架构:iOS 代码架构:iOS架构师:iOS架构设计: iO...

  • iOS架构

    iOS架构iOS架构

  • iOS组件化文章汇总

    iOS应用架构谈 组件化方案 APP组件化之路 我所理解的组件化之路 iOS 组件化方案探索 围观神仙打架,反革命...

  • 【IOS开发进阶系列】iOS系统架构专题

    1 IOS系统架构 1.1 IOS系统架构 1.1.1 iOS的系统架构 iOS的系统架构分为四个层次:核心操作系...

  • iOS插件化架构探索

    前言 WWDC2014苹果在iOS上开放了动态库,这给了我们一个很大的想象空间。 动态库即动态链接库,是Cocoa...

  • (翻译) iOS架构:探索 RIBs

    原创作者:Stan Ostrovskiy原文链接:iOS Architecture: Exploring RIBs...

  • iOS插件化架构探索

    +前言 WWDC2014苹果在iOS上开放了动态库,这给了我们一个很大的想象空间。动态库即动态链接库,是Cocoa...

  • iOS应用架构谈 开篇

    iOS应用架构谈 开篇 iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网...

网友评论

      本文标题:iOS架构探索:MVC-MVP-MVVM

      本文链接:https://www.haomeiwen.com/subject/hqqviltx.html