MVC、MVVM、MVP、VIPER架构设计模式

2020-03-02  本文已影响0人  Janek_m

https://www.cnblogs.com/oc-bowen/p/6255475.html

架构模式

MV(X)系列概要

当今我们已经有很架构设计模式方面的选择:

前三种设计模式都把一个应用中的实体分为以下三类:

将实体进行划分给我们带来了以下好处:

(1)MVC

MVC一系列的特征:

如果你不想在架构选择上投入更多精力,那么Cocoa MVC无疑是最好的方案,而且你会发现一些其他维护成本较高的模式对于你所开发的小的应用是一个致命的打击。

“就开发速度而言,Cocoa MVC是最好的架构选择方案。”

(2)MVP

这看起来不正是苹果所提出的MVC方案吗?确实是的,这种模式的名字叫做MVC,但是,这就是说苹果的MVC实际上就是MVP了?不,并不是这样的。如果你仔细回忆一下,View是和Controller紧密耦合的,但是MVP的协调器Presenter并没有对ViewController的生命周期做任何改变,因此View可以很容易的被模拟出来。在Presenter中根本没有和布局有关的代码,但是它却负责更新View的数据和状态。

MVP一特性的分析:

“iOS 中的MVP意味着可测试性强、代码量大。”

(3)MVVM

MVVM 的作用和问题

MVVM 在实际使用中,确实能够使得 Model 层和 View 层解耦,但是如果你需要实现 MVVM 中的双向绑定的话,那么通常就需要引入更多复杂的框架来实现了。

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

第二点:对于过大的项目,数据绑定需要花费更多的内存。

ReactiveCocoa

函数式编程(Functional Programming)和响应式编程(React Programming)也是当前很火的两个概念,它们的结合可以很方便地实现数据的绑定。于是,在 iOS 编程中,ReactiveCocoa 横空出世了,它的概念都非常 新,包括:

(4)VIPER--把LEGO建筑经验迁移到iOS app的设计

VIPER

当我们把VIPER和MV(X)系列作比较时,我们会在任务均摊性方面发现一些不同:

“找到一个适合的方法来实现路由对于iOS应用是一个挑战,MV(X)系列避开了这个问题。”

VIPER一特性的分析:


因此,在同一个应用中包含着多种架构。比如,你开始的时候使用MVC,然后突然意识到一个页面在MVC模式下的变得越来越难以维护,然后就切换到MVVM架构,但是仅仅针对这一个页面。并没有必要对哪些MVC模式下运转良好的页面进行重构,因为二者是可以并存的。

有一些人总是追赶着技术,有什么新技术不管三七二十一立马就用,结果被各种坑。

又有一些人,总是担心新技术带来的技术风险,不愿意学习。结果现在还有人在用 MRC 手动管理引用计数。

而我想说,我们需要保持的是一个拥抱变化的心,以及理性分析的态度。在新技术的面前,不盲从,也不守旧,一切的决策都应该建立在认真分析的基础上,这样才能应对技术的变化。

上一篇 下一篇

猜你喜欢

热点阅读