MVC 模式是一个非常经典且精简的设计模式,常见的 iOS 项目基本上都采用了这种模式进行开发。
然而,随着项目规模的增长,MVC 模式已经无法很好地帮助我们解耦,构建一个易维护的项目变得愈发艰难。
业务逻辑愈加复杂,导致项目的代码量剧增是最直接的原因。某个 View Controller 可能会有几千行代码,这样的项目代码易读性非常差,维护难度也会增大。而且,这也容易导致数据的读写不同步,在较为混乱的代码中维护复杂的数据流,非常容易导致盘根错节的问题。
MVP 在 MVC 的基础上采用了面向接口/协议编程,最终使业务逻辑代码更易测试。如果结合 Clean Architecture,还可以有效地减轻我们的思维负担。
接下来,请和 Ficow 一起结合架构图来分析这两种App设计模式吧~
在构建 App 的过程中,我们需要思考以下问题:
想清楚这些核心问题之后,解耦、测试等问题也就迎刃而解了。
下图展示了我们期望的 MVC 模式,Controller 介于 View 和 Model 之间,并协调这二者之间的工作:
然而,很多时候我们在 iOS 开发工作中用到的 MVC 模式是这样的:
在这种情况下,Controller 和 View 耦合到了一起,MVC 也成了 Massive View Controller 笑柄。如果项目规模比较小,而且不需要做单元测试,MVC 是最易用、最实用的模式。确实非常简单粗暴,如果不考虑项目质量,这样开发是最省事的~
如果您依然钟爱 MVC 模式,又希望项目中的业务逻辑代码易测试,您可以参考 Ficow 的这篇文章:基于【依赖注入】和【控制反转】构建易测试的代码
MVP 可以有效地帮助我们解决 MVC 存在的问题。此时,Presenter 负责协调 View, Controller 与 Model 之间的工作:
Presenter 可以很好地组织业务逻辑,我们可以为其添加测试代码来验证业务逻辑的正确性,从而保证整个项目的质量。
如果您的项目规模不大,而且您希望方便地添加测试,MVP 会是一个比较好的选择。
很多人认为,MVP 只不过是把 MVC 中的 C 换成了 P,其实不然。
两者最主要的区别在于:
凭借这些特点,MVP 比 MVC 具有更好的可测试性。
想了解更多的差异点,您可以参考 What are MVP and MVC and what is the difference?
关于示例代码,您可以参考 ios-mvp-clean-architecture 这个项目。其核心思想如下:
其实,这些 App 设计模式都是在按照职责对各个功能模块进行划分,以此来实现模块间的解耦。解耦后,开发、维护和测试也就变得相对容易一些。
这就像住宅一样。小宅子一般不会有太多的空间分类,而大宅子就会有各种室、各种厅。我们的人脑天生就很擅长进行分类,根据不同的功能对代码进行归类,就可以帮助我们更好的管理这些代码。
如果一个大宅子不进行合理的划分,我们很难想象,住在这个大宅子里的人会有怎样的居住体验呢~
参考内容:
App 架构 - objc.io
The Clean Architecture
ios-clean-architecture
ios-mvp-clean-architecture
What are MVP and MVC and what is the difference?
觉得不错?点个赞呗~
本文链接:一字之差,MVP 比 MVC 强在哪里?
转载声明:本站文章如无特别说明,皆为原创。转载请注明:Ficow Shen's Blog