VIPER
VIPER — шаблон проєктування програми з розподіленою модульною архітектурою. Це популярна альтернатива паттернам MVC, MVP і MVVM, яка спрощує роботу над проєктом для великих команд, дає змогу легко проводити юніт-тести й повторно використовувати код.
VIPER використовується для розробки під iOS, але в Android є аналог шаблона — Clean Architecture, який використовували, як основу для цієї архітектури.
Вид — модуль шару інтерфейсу, що відображає зміни передані Presenter і відправляє йому назад інформацію про дії користувача.
Основна бізнес-логіка програми, не пов’язана з інтерфейсом. Отримує дані з бази, винесеною в окремий модуль Model, через прошарок Entity.
Модуль-посередник, що відповідає за передачу даних між View і Interactor. Щоб інформація з бази коректно відображалася в інтерфейсі, він форматує її, створюючи відповідний екземпляр класу.
Сховище об’єктної моделі, до якої звертається Interactor. Містить тільки об’єкти даних без бізнес-логіки.
Навігаційна логіка, що описує, як будуть відбуватися дії спричинені користувачем у додатку.
Крім цього в додатках з архітектурою VIPER зберігається видозмінений шар Model — база даних із менеджерами мережевих і локальних запитів, до яких звертатиметься Interactor. Ці залежності не входять у загальний шаблон і можуть бути реалізовані класичним способом. Крім того, розробники можуть додавати й інші прошарки й оболонки, щоб оптимізувати проєкт під конкретні завдання, але основні частини програми однаково будуть працювати за описаним шаблоном.
Усі архітектури ПО призначені для того, щоби спростити і впорядкувати спільну розробку. З Viper, у якому більше роздільних модулів, ніж у класичних патернах, ці завдання вирішуються максимально ефективно. Крім можливості задіяти більше людей, сам код із використанням такої архітектури буде чистіше, більш структуруваним й компактним, а головне придатним для повторного використання. Це зумовлено тим, що в кожного модуля є своя чітка зона відповідальності, а не розмита, як у MVVM, і багато класів для швидкої зміни будь-якого блоку.
Слабка зв’язність із високим зчепленням у Viper дає змогу в будь-який момент доопрацювати функціональність програми, помістивши її в окремий модуль, можливо, зовсім без впливу на інші компоненти програми. І все це з мінімальною кількістю конфліктів злиття.
Router, який відповідає за навігацію, дає змогу знову використовувати компоненти інтерфейсу і View загалом, не чіпаючи інші модулі, значно заощаджуючи час на розробку. Entities знижує навантаження на Model і робить систему більш швидкої і стійкою.
Viper — ідеальна архітектура для Test Driven Development (TDD). 99 % всього коду програми може бути покрите тестами без істотних витрат часу, в порівнянні з використанням будь-якої іншої архітектури. Це можливо, завдяки тому, що бізнес-логіка й інтерфейс програми, за умови такої розробки, пов’язані дуже слабо й можна писати безліч автоматичних тестів.
Ваші розробники будуть знати, який шаблон проєктування краще для проєкту, як тільки ви розкажете їм що має робити ваша програма. VIPER — одна з базових архітектур додатків на iOS, яка оптимально підходить для масштабних проєктів. Вона вимагає від розробників більшого досвіду й навичок, але дає можливість з мінімумом витрат допрацьовувати додаток, коли це буде необхідно. Крім того, VIPER дозволяє легко тестувати в автоматичному режимі буквально кожен шматочок коду, що однаково добре для проєктів будь-якого масштабу.