VIPER设计模式简介(Swift 3)

VIPER是首字母缩略词,代表可被视为干净架构的设计模式示例。 本质上,使用干净的体系结构,您可以将代码抽象为四层:实体(模型),用例(业务逻辑),控制器/网关/表示者(处理UI逻辑),设备/ UI / Web / DB /外部接口(框架)可能会改变)。

VIPER代表:

V —查看(向用户显示信息并检测用户交互)

I —交互器(通过获取数据和存储数据来操纵实体/模型)

P —演示者(不使用UIKit,它包含与UI相关的业务逻辑并准备用于演示的数据)

E —实体(您的模型对象)

R —路由器(又称线框,负责模块/应用程序中的导航)。

VIPER体系结构可以使关注点更清晰地分离,并将viewController与处理应用程序中的大多数职责分离。 针对每个用例将关注点分为模块(即,为用户提供地图)。 每个模块都有清晰的路由逻辑,表示逻辑和业务逻辑层。

视图(视图控制器):

视图/视图控制器的主要目的是向用户显示信息并检测用户交互。 视图/视图控制器拦截用户事件,并且在VIPER设计模式内具有一个联系点: 演示者。 视图/视图控制器拥有并将用户操作发送给演示者。 例如, 视图/视图控制器将使演示者知道何时开始加载自身以及何时用户点击按钮。

主持人:

演示者视图/视图控制器接收用户操作信息,并负责与UI相关的业务逻辑数据(但不包括UIKit!)。 演示者准备用于演示的数据。 演示者具有三个联系点: 视图/视图控制器交互器路由器 。 演示者负责从交互器中获取数据,并准备该数据以进行演示,然后将其传递回视图/视图控制器(以便可以对其进行更新),创建要移交给路由器的对象并确定是否要传递给路由器。需要来自交互器的更多数据 我喜欢将主持人视为“调解人”。

交互器:

交互器了解我们的模型或实体 ,并从管理器类(即DataStore.swift)中获取并存储数据。 演示者要求交互器获取更新的数据,然后交互器将其提供回去。 交互器可以处理数据(即验证地图位置是否具有有效名称),并且可以调用帮助程序/管理器类(LocationStore.swift)创建实体

实体/实体:

实体是我们的数据模型(即MapName,MapCoordinate,MapLocation)。 这些实体交互器操纵 交互者完全了解实体及其属性

路由器/线框:

路由器有一个联系点: 主持人路由器 (又称线框 )拥有一个窗口并负责模块中的导航。 它创建视图控制器并连接演示者,以充当交互器的输出,并使视图控制器成为演示者的接口。 演示者可能知道要去哪里,但是路由器知道如何去那里。

资源:

使用VIPER架构iOS应用程序— ObjC