VIPER (View, Interactor, Presenter, Entity en Router) is een ontwerppatroon voor softwareontwikkeling dat modulaire code ontwikkelt op basis van een schone ontwerparchitectuur. De modules in VIPER zijn protocol-georiënteerd en elke functie, eigenschap input en output wordt uitgevoerd door middel van specifieke sets van communicatieregels.
VIPER wordt vaak gebruikt om smartphone apps te ontwikkelen en wordt veel gebruikt in iOS samen met Swift, Apple's programmeertaal. VIPER is gebaseerd op SOLID-ontwerpprincipes, met name het single responsibility-principe.
De woorden in het VIPER-acroniem duiden op de soorten modules in het ontwerppatroon:
- View (ook bekend als de view controller): Geeft informatie weer voor de gebruiker en detecteert gebruikersinteractie. De Presenter is de enige module waarmee de View-module contact heeft.
- Interactor: Manipuleert entiteiten of modellen en haalt gegevens op en slaat deze op.
- Presenter: Bevat de gebruikersinterface en bereidt gegevens voor op de presentatie. De Presenter neemt contact op met de Interactor voor gegevensaanvragen, de View om de voorbereide gegevens aan de gebruiker te presenteren en de Router om objecten door te geven.
- Entity: de gegevensmodellen die door de Interactor worden gemanipuleerd.
- Router (ook bekend als wireframe): zorgt voor de navigatie in de module of toepassing. Hij creëert de View en stuurt de Presenter om als output naar de Interactor te fungeren. Neemt contact op met de Presenter om verzoeken te routeren.
De abstractie van code in de lagen van entiteiten, programmalogica en apparaten en externe interfaces is een gemeenschappelijk kenmerk van VIPER en van schone ontwerparchitecturen in het algemeen.