viper в ios проектах
TRANSCRIPT
![Page 1: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/1.jpg)
VIPER АРХИТЕКТУРА
в ios проектах
БАШАРОВ А.В.
![Page 2: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/2.jpg)
VIPER
V viewI interactor P presenterE entityR router
View Presenter Interactor Entity
Router
![Page 3: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/3.jpg)
![Page 4: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/4.jpg)
MVC by Apple
Controller
View Model
user action update
notifyupdate
![Page 5: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/5.jpg)
MASSIVE Controller(UIViewController)
View Model
user action update
notifyupdate
MVC by Apple
![Page 6: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/6.jpg)
Проблемы Massive View Controller
Высокая сложность поддержки и развитияВысокий порог вхождения
Слабо тестируемНевозможно переиспользовать
![Page 7: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/7.jpg)
VIPER модуль
V viewI interactor P presenterE entityR router
View Presenter Interactor Entity
Router
![Page 8: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/8.jpg)
Что обещает VIPER?
Четкое распределение ролей внутри модуля
Легкая расширяемость и поддержка
Тестируемость
Избавление от Massive View Controllers
![Page 9: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/9.jpg)
View
View Presenter Interactor Entity
Router
ПассивнаПередача событий в Presenter
![Page 10: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/10.jpg)
Interactor
View Presenter Interactor Entity
Router
Бизнес логика
![Page 11: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/11.jpg)
Presenter
View Presenter
Interactor Entity
Router
Центр принятия решений
![Page 12: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/12.jpg)
Entity
View Presenter
Interactor Entity
Router
Модельная сущность
![Page 13: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/13.jpg)
Router
View Presenter Interactor Entity
Router
Переходы между экранами
*Сборка модуля, НО!!!
Assembly
![Page 14: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/14.jpg)
СБОРКА МОДУЛЯ
![Page 15: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/15.jpg)
Слоистая архитектура
Presentation layer
Service layer
Core layer
![Page 16: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/16.jpg)
Слоистая архитектура
Presentation layer
Service layer
Core layer
View Presenter Interactor
RouterAssembly
Service Service
NetworkClient Mapper
Serializer Storage
![Page 17: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/17.jpg)
Пример
![Page 18: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/18.jpg)
View Presenter Interactor
Router
CityService
View
![Page 19: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/19.jpg)
View Presenter Interactor
Router
CityService
Presenter
![Page 20: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/20.jpg)
View Presenter
Interactor
Router
CityService
Interactor
![Page 21: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/21.jpg)
View Presenter Interactor
Router
CityService
Presenter
![Page 22: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/22.jpg)
obtainCities loadCities getCities:
Работа типового модуля
View
Presenter
Interactor
CityService
didLoadCities:
updateTable…
![Page 23: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/23.jpg)
Переходы между экранами (модулями)
CityServiceView Present
er Interactor
Router
Экран 1
View Presenter Interactor
Router
CityServiceЭкран
2
cityId<ModulInput>
![Page 24: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/24.jpg)
Переходы между экранами (модулями)
View ViewController ModelЭкран
2
<ModulInput>
CityServiceView Present
er Interactor
Router
Экран 1
cityId
![Page 25: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/25.jpg)
Какие минусы?
• Много классов• Из-за протоколов сложнее
перемещаться по коду
• «Время старта вашего приложения напрямую зависит от количества классов в нем»
• Увеличение времени разработки
![Page 26: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/26.jpg)
WWDC 2016, Optimizing App Startup Time…100 or 1000 classes isn’t a problem
![Page 27: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/27.jpg)
WWDC 2016, Optimizing App Startup Time…we’ve seen apps with 5-20,0000 classes
![Page 28: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/28.jpg)
WWDC 2016, Optimizing App Startup Time…add up to 800 milliseconds to your app launch time
![Page 29: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/29.jpg)
Кодогенерация
5 новых классов
5 новых протоколов
Один модуль это
https://github.com/bizibizi/BIZViperModuleGenerator
https://github.com/rambler-ios/Generamba
![Page 30: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/30.jpg)
ИТОГ
• Проект поделен на модули
• Бизнес логика отделена от UI
• Легкая расширяемость и поддержка
• Не только для ios
![Page 31: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/31.jpg)
![Page 32: Viper в ios проектах](https://reader035.vdocuments.net/reader035/viewer/2022070522/58eebc821a28ab4a168b45c7/html5/thumbnails/32.jpg)
Спасибо за внимание!