viper в ios проектах
TRANSCRIPT
VIPER АРХИТЕКТУРА
в ios проектах
БАШАРОВ А.В.
VIPER
V viewI interactor P presenterE entityR router
View Presenter Interactor Entity
Router
MVC by Apple
Controller
View Model
user action update
notifyupdate
MASSIVE Controller(UIViewController)
View Model
user action update
notifyupdate
MVC by Apple
Проблемы Massive View Controller
Высокая сложность поддержки и развитияВысокий порог вхождения
Слабо тестируемНевозможно переиспользовать
VIPER модуль
V viewI interactor P presenterE entityR router
View Presenter Interactor Entity
Router
Что обещает VIPER?
Четкое распределение ролей внутри модуля
Легкая расширяемость и поддержка
Тестируемость
Избавление от Massive View Controllers
View
View Presenter Interactor Entity
Router
ПассивнаПередача событий в Presenter
Interactor
View Presenter Interactor Entity
Router
Бизнес логика
Presenter
View Presenter
Interactor Entity
Router
Центр принятия решений
Entity
View Presenter
Interactor Entity
Router
Модельная сущность
Router
View Presenter Interactor Entity
Router
Переходы между экранами
*Сборка модуля, НО!!!
Assembly
СБОРКА МОДУЛЯ
Слоистая архитектура
Presentation layer
Service layer
Core layer
Слоистая архитектура
Presentation layer
Service layer
Core layer
View Presenter Interactor
RouterAssembly
Service Service
NetworkClient Mapper
Serializer Storage
Пример
View Presenter Interactor
Router
CityService
View
View Presenter Interactor
Router
CityService
Presenter
View Presenter
Interactor
Router
CityService
Interactor
View Presenter Interactor
Router
CityService
Presenter
obtainCities loadCities getCities:
Работа типового модуля
View
Presenter
Interactor
CityService
didLoadCities:
updateTable…
Переходы между экранами (модулями)
CityServiceView Present
er Interactor
Router
Экран 1
View Presenter Interactor
Router
CityServiceЭкран
2
cityId<ModulInput>
Переходы между экранами (модулями)
View ViewController ModelЭкран
2
<ModulInput>
CityServiceView Present
er Interactor
Router
Экран 1
cityId
Какие минусы?
• Много классов• Из-за протоколов сложнее
перемещаться по коду
• «Время старта вашего приложения напрямую зависит от количества классов в нем»
• Увеличение времени разработки
WWDC 2016, Optimizing App Startup Time…100 or 1000 classes isn’t a problem
WWDC 2016, Optimizing App Startup Time…we’ve seen apps with 5-20,0000 classes
WWDC 2016, Optimizing App Startup Time…add up to 800 milliseconds to your app launch time
Кодогенерация
5 новых классов
5 новых протоколов
Один модуль это
https://github.com/bizibizi/BIZViperModuleGenerator
https://github.com/rambler-ios/Generamba
ИТОГ
• Проект поделен на модули
• Бизнес логика отделена от UI
• Легкая расширяемость и поддержка
• Не только для ios
Спасибо за внимание!