模型视图 Presenter

2025年3月17日 | 阅读 3 分钟

在本教程的前一节中,我们讨论了 MVC 的另一种设计模式,即模型-视图-视图模型,在其中,我们创建了一个新的组件视图模型,负责数据操作任务。 但是,我们可以有一个更好的替代方案,因为视图控制器仍然做了很多工作,因此,在 MVC 中存在缺乏分布,在 MVVM 中也存在一点。

此外,控制器与视图生命周期紧密相关,因此,测试视图控制器确实变得非常困难。 在本教程的这一部分中,我们将讨论另一种替代设计模式,即 MVP(模型-视图-呈现器),它将主要的组件呈现器添加到方案中。

什么是 MVP?

模型-视图-呈现器(MVP)是一种设计模式,将对象分为三个主要组件:模型、视图和呈现器。 现在,视图控制器被认为是视图,而呈现器包含应用程序的所有业务逻辑。

  • 视图: 视图由视图和视图控制器组成。 它仅包含与视图相关的代码。 它负责所有 UI 设置和事件。
  • 呈现器: 呈现器包含应用程序的所有业务逻辑。 它定义用户操作并通过委托方法更新 UI。 它不依赖于 UIKit,因此易于测试。
  • 模型: 模型包含应用程序数据。 网络调用、解析器、扩展程序、管理器等都在这里进行。
iOS Model View Presenter

MVP 遵循被动视图模式; 也就是说,所有操作都将转发给呈现器,呈现器使用委托更新 UI 元素。 视图将传递操作并侦听呈现器的更新。 呈现器也会相应地更新模型。

示例

在本例中,我们将构建一个简单的登录应用程序,该应用程序遵循 MVP 架构。 在这里,我们将创建一个呈现器、一个视图控制器和一个 UserModel。

界面生成器

在这个项目的 storyboard 中,我们将在一个视图控制器中添加两个视图。 在第一个视图上,我们将添加两个文本字段以从用户处获取输入,以及一个提交按钮,在另一个视图上,我们将显示一条成功消息。 最初,第二个视图将被隐藏,并在成功登录时显示。

iOS Model View Presenter

在上图中,内部视图显示在 storyboard 中。 现在我们将在该视图上方添加另一个视图,并将背景颜色设置为黑色,透明度为 60%。 它将如下所示。

iOS Model View Presenter

现在,我们将介绍项目的设计模式。 在这里,我们将遵循 MVP 作为设计模式。 我们将在项目中创建以下文件夹结构。

iOS Model View Presenter

LoginPresenter 将包含应用程序的所有业务逻辑。 当用户在输入用户名和密码后单击提交按钮时,将触发其 submitButtonClicked 方法。 它执行验证并在确认时创建模型对象。 它还通过视图控制器实现的委托方法更新 UI。

LoginPresenter.swift

LoginViewController.swift

UserModel.swift