什么是VIPER?

VIPER是一种模式设计,代表了传统模式MVC(模型-视图-控制器)的替代产品,解决了控制器可以包含所有应用程序逻辑的问题,从而在组件之间产生了强大的耦合,并使难度更大。代码维护,例如使用MVC进行代码维护。

VIPER将应用程序逻辑的责任划分为多个组件,从而实现了更大程度的去耦以及更好的代码维护和测试。

这些组件将它们的名称命名为模式:(V)iew,(I)相互作用器,(P)ententer,(E)ntity和(R)outing或线框。

视图

VIPER中的视图是被动的。 他们向Presenter通知用户产生的事件,并期望他的响应与必须显示的数据。

视图负责了解如何显示数据和管理用户交互。

他们通过视图模型处理数据,其中包含必须显示的特定数据。

主持人

它们从视图中接收事件,并基于这些事件可以与交互器通信,以请求数据请求,或与路由或线框通信,以在应用程序中执行某些导航逻辑。

交互者回答后,演示者负责在业务模型(使用交互者)和视图模型(使用视图)之间执行转换数据。 转换后,它们将与视图通信,以通知要显示的视图模型。

演示者不知道如何构成视图。

互动者

他们负责执行所有业务逻辑。 他们使用业务模型或实体。

交互者必须处理来自演示者的请求数据。 因此,依次调用服务,数据库或在数据所在的任何地方搜索。 他们转换业务模型或实体中的数据。 处理完数据后,会将其提供给演示者。

交互者不了解用户界面。

实体

它们代表自己的应用程序业务逻辑数据,并由交互器处理。

路由

他们负责执行所有屏幕导航,进入应用程序。 路由也称为线框。

首先创建它们,它们自己负责创建其他组件:视图,演示者,交互者,并在它们之间建立关系。

它们接收主持人的请求,并负责在屏幕之间传输数据。

他们允许知道应用程序内导航的不同可能性是什么。

什么时候应该使用VIPER

当我们想要为我们的项目提供一个有序的结构,可以轻松,清晰地扩展并且可以重用时,您可以并行开发不同的组件而不会产生冲突。

VIPER促进了组件的测试,并且由于每个组件封装了不同的职责而可能产生的可能的bug。

何时不应该使用VIPER

VIPER牵涉到许多组件的创建,如果您的项目很小并且您知道将来将无法扩展,那么这可能会带来不便。

另外,所有开发团队都必须完全了解VIPER,以避免与其他模式产生混合,这可能会妨碍项目的开发和维护。

我在这里留下一个在Swift中开发的小项目,作为具有VIPER模式的项目的示例。 希望对您有所帮助。

https://github.com/aortegas/VIPER_Example.git

请让我知道您对本文的看法,您的问题或产生的错误。 感谢您的反馈意见。 请享用!

阿尔贝托·奥尔特加(Alberto Ortega)