8. ● Четкое распределение ролей внутри модуля
● Легкая расширяемость и поддержка
● Тестируемость
● Избавление от Massive View Controllers
Что обещает VIPER?
8
17. О приложении
● Новости
● Объявления
● События
● Профили пользователей
и многое другое…
Практически все экраны приложения – таблица
Практически все экраны отображают данные, полученные с сервера
17
18. Типовой модуль
ASSEMBLY
<ViewOutput> <InteractorInput>
<RouterInput>
<Service>
UIViewController
UIView, UIControl
ФабрикиUI-компонентов
Фабрики view model
Состояние модуля
Фабрики сабмодулей
Обработка событий от View
Обновление View
Взаимодействие с
сервисами
<ModuleInput> <ModuleOutput>
Сетевые запросы
Данные сессии
Информация о текущем
пользователе
Настройки приложения
VIEW PRESENTER INTERACTOR
ROUTER
<ViewInput> <InteractorOutput>
SERVICE
18
20. Работа типового модуля
Подгрузка данных
objectsobjects
Presenter InteractorView
20
onInfiniteScroll:
appendData:
didTriggerInfiniteScrollEvent:
didFetchNextData:
fetchNextData
21. Работа типового модуля
Обработка внешних событий
objectsobjects
Presenter InteractorView
21
prependData: didReceiveData: didReceivePushNotification:
22. Сервисы и их зависимости
● Single responsibility
● Взаимодейтвие через протоколы
● Dependency Injection (Typhoon)
22
FeedService
FeedBlocksFactoryRequestCreator
SessionStorage
AppConfiguration
31. Первые впечатления
● ААА! Сложна!
● Очень много связей
● Assembly(Typhoon) == Магия
● Это overkill
31
32. Если разобраться
● Все абсолютно прозрачно
● Все связи логичные
● Assembly(Typhoon) == Фреймворк
32
33. Merge
● Xcode не умеет безболезненно добавлять файлы в проект
● Огромное число конфликтов
● Merge мог занимать около 40 минут
33
34. xUnique
● Скрипт на python
● Встраивается в проект как post-build action
● В разы уменьшает количество конфликтов
Минусы
● После работы скрипта теряется текущая навигация проекта
● Если вызвать несколько раз одновременно - поломает проект
34
38. Адаптация к изменяющимся требованиям
● Новый модуль для свайпа контента
● Подготовка старых контент модулей к отображению в новом
● Всю логику получения и кеширования контента переместили в
новый сервис
38
40. Итог
● Проект поделен на модули
● Бизнес-логика отделена от UI
● Проект легко покрывается тестами
● Предсказуемость поведения
● VIPER сочетается с scrum
40