iOS - MVP 架构模式

1、MVP

  • 从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景。MVP 的协调器 Presenter 并没有对 ViewController 的生命周期做任何改变,因此 View 可以很容易的被模拟出来。在 Presenter 中根本没有和布局有关的代码,但是它却负责更新 View 的数据和状态。MVC 和 MVP 的区别就是,在 MVP 中 M 和 V 没有直接通信。
  • MVP 是第一个如何协调整合三个实际上分离的层次的架构模式,既然我们不希望 View 涉及到 Model,那么在显示的 View Controller(其实就是 View)中处理这种协调的逻辑就是不正确的,因此我们需要在其他地方来做这些事情。例如,我们可以做基于整个 App 范围内的路由服务,由它来负责执行协调任务,以及 View 到 View 的展示。这个出现并且必须处理的问题不仅仅是在 MVP 模式中,同时也存在于以下集中方案中。
  • 1)MVP模式下的三个特性的分析:
    • 任务均摊 -- 我们将最主要的任务划分到 Presenter 和 Model,而 View 的功能较少;
    • 可测试性 -- 非常好,由于一个功能简单的 View 层,所以测试大多数业务逻辑也变得简单;
    • 易用性 -- 代码量比 MVC 模式的大,但同时 MVP 的概念却非常清晰。
  • 2)iOS MVP 示意图:

    • 就 MVP 而言,UIViewController 的子类实际上就是 Views 并不是 Presenters。这点区别使得这种模式的可测试性得到了极大的提高,付出的代价是开发速度的一些降低,因为必须要做一些手动的数据和事件绑定。
    • 还有一些其他形态的 MVP -- 监控控制器的 MVP。这个变体包含了 View 和 Model 之间的直接绑定,但是 Presenter 仍然来管理来自 View 的动作事件,同时也能胜任对 View 的更新。

  • 3)规范的 MVP 设计模式:
    • 1、View 层比较简单明,就是 View 的一些封装、重用。在一款精心设计过的 App 里面,应该有很多 View 是可以封装重用的。比如一些自己的 TableViewCell,自己设计的 Button,一些 View(包含一些子 View,UI 精心设计过,在项目里多处出现的)等等。
    • 2、Model 层应该不仅仅是创建一个数据对象,还应该包含网络请求,以及数据 SQLite 的 CRUD 操作(比如 iOS 平台,一般以 FMDB 框架直接操作 sql,或者用 CoreData) 。一般可以将数据对象是否需要缓存设计成一个字段 isCache,或者针对整个项目设计一个开存储关,决定整个项目是否需要数据缓存。我们常见的新闻类 App,在离线的时候看到的数据,都是做了缓存处理的。比如一些金融类的 App,实时性比较高,是不做缓存的。
    • 3、Presenter 层并不涉及数据对象的网络请求和 SQLite 操作,只是 Model 层和 View 层的一个桥梁。Presenter 层就不至于太臃肿,容易看懂。一些大的 App,或因为上线时间比较久了,经历过众多程序员的修补,或因前期并未做好架构,以至于打开一个类,几千行的代码,看着自己都晕。
时间: 2024-10-25 13:04:58

iOS - MVP 架构模式的相关文章

iOS - MVC 架构模式

1.MVC 从字面意思来理解,MVC 即 Modal View Controller(模型 视图 控制器),是 Xerox PARC 在 20 世纪 80 年代为编程语言 Smalltalk-80 发明的一种软件设计模式,至今已广泛应用于用户交互应用程序中.其用意在于将数据与视图分离开来.在 iOS 开发中 MVC 的机制被使用的淋漓尽致,充分理解 iOS 的 MVC 模式,有助于我们程序的组织合理性. MVC 的几个明显的特征和体现: View 上面显示什么东西,取决于 Model. 只要 M

iOS - MVVM 架构模式

1.MVVM 从字面意思来理解,MVVM 即 Modal View ViewModel(模型 视图 视图模型).MVC 是一个用来组织代码的权威范式,也是构建 iOS App 的标准模式.Apple 甚至是这么说的.在 MVC 下,所有的对象被归类为一个 model,一个 view,或一个 controller.Model 持有数据,View 显示与用户交互的界面,而 View Controller 调解 Model 和 View 之间的交互.然而,随着模块的迭代我们越来越发现 MVC 自身存在

iOS - VIPER 架构模式

1.VIPER 从字面意思来理解,VIPER 即 View Interactor Presenter Entity Router(展示器(视图) 交互器 协调器 实体(数据) 路由器),迄今为止,划分责任的粒度是很好的选择.VIPER 在责任划分层面进行 了迭代,VIPER 分为五个层次: 展示器 -- 包含 UI 层面的业务逻辑以及在交互器层面的方法调用. 交互器 -- 包括关于数据和网络请求的业务逻辑,例如创建一个实体(数据),或者从服务器中获取一些数据.为了实现这些功能,需要使用服务.管理

精华阅读第 9 期 |滴滴出行 iOS 客户端架构演进之路

「架构都是演变出来的,没有最好的架构,只有最合适的架构!」最近,滴滴出行平台产品中心 iOS 技术负责人李贤辉接受了 infoQ 的采访,阐述了滴滴的 iOS 客户端架构模式与演变过程.李贤辉也是移动开发精英俱乐部中的一员,所以本期重点推荐了这篇文章. 更多精彩,请看这里,内容系国内 ITOM 管理平台 OneAPM 整理: 滴滴出行 iOS 客户端架构演进之路 成长为 iOS 大 V 的秘密 React Native开源项目-iOS新浪微博客户端 可靠 UDP 传输 精华阅读第8期|Alpha

浅谈Android官方MVP架构解读_Android

综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构.通常在开发中将XML文件视为MVC中的View角色,而将Activity则视为MVC中的Controller角色.不过更多情况下在实际应用开发中Activity不能够完全充当Controller,而是Controller和View的合体.于是Activity既要负责视图的显示,又要负责对业务逻辑的

iOS 开发中的 Flux 架构模式

本文讲的是iOS 开发中的 Flux 架构模式, 在半年前,我开始在 PlanGrid iOS 应用程序中采用 Flux 架构(开发).这篇文章将会讨论我们从传统的 MVC 转换到Flux的动机,同时分享我们目前积累到的经验. 我尝试通过讨论代码来描述我们大部分的 Flux 实现, 它用于我们今天的产品中. 如果你只对综合结果感兴趣, 请跳过这篇文章的中间部分. 为什么从 MVC 转移 为了引入我们的决定, 我想要先谈一谈 PlanGrid 这个应用遇到的一些挑战.一些问题仅针对企业级应用程序,

Square对iOS App架构的新尝试---Ziggurat

今年六月,我做了一场关于避免臃肿的ViewController的演讲,用Swift讲解了一种采用"单向数据流"的架构模式.当时并没有发布相关的博客,甚至没有给这个架构起个名字.现在两者都有了.首先介绍一下Ziggurat:它是一种通过不可变的视图模型和单向数据流来实现的分层的.易测试的架构模式. 这个架构的名字Ziggurat是根据阶梯状的金字塔得来的.像金字塔的阶梯一样,数据以数据流的形式单向地沿着App的层级传递,并逐层缩小.单向不可变的数据流可以减少认知负载,同时使类也变得更加瘦

IOS应用架构思考二(网络图片库)

移动端架构中图片库是非常重要的一环,其实图片库也可以理解为网络库的一种特殊使用模式,为了满足需要,图片库至少要满足以下特点: 提供一个加载入口,通常以UIImageView的类别方法setImageWithURL:...开始 支持异步网络加载图片 支持内存缓存和文件缓存 确保同一张图片不会被重复下载 主流图片格式的解码 著名的优秀关于图片加载的库有: SDWebImage AFNetworking EGOImageLoading 已经年久失修 1. Load入口 关于Load入口方式,一般有两种

Android开发中的MVP架构

最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和学习各种文章以及专题讨论所总结出来的,它包括以下几点: 为什么越来越多的人开始关注架构? 首先,MVP是什么? 哪种架构才是最好的,MVC,MVVM还是MVP? MVP的利与弊 Show me the code!!!代码展示 不幸的,这篇文章将不包括: 详细生动的代码示例 如何编写测试代码 最后,我将告诉你如何更进一步学习这些专题.