美文网首页
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

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