32
VIPER АРХИТЕКТУРА в ios проектах БАШАРОВ А.В.

Viper в ios проектах

Embed Size (px)

Citation preview

Page 1: Viper в ios проектах

VIPER АРХИТЕКТУРА

в ios проектах 

БАШАРОВ А.В.

Page 2: Viper в ios проектах

VIPER

V viewI interactor P presenterE entityR router

View Presenter Interactor Entity

Router

Page 3: Viper в ios проектах
Page 4: Viper в ios проектах

MVC by Apple

Controller

View Model

user action update

notifyupdate

Page 5: Viper в ios проектах

MASSIVE Controller(UIViewController)

View Model

user action update

notifyupdate

MVC by Apple

Page 6: Viper в ios проектах

Проблемы Massive View Controller

Высокая сложность поддержки и развитияВысокий порог вхождения

Слабо тестируемНевозможно переиспользовать

Page 7: Viper в ios проектах

VIPER модуль

V viewI interactor P presenterE entityR router

View Presenter Interactor Entity

Router

Page 8: Viper в ios проектах

Что обещает VIPER?

Четкое распределение ролей внутри модуля

Легкая расширяемость и поддержка

Тестируемость

Избавление от Massive View Controllers

Page 9: Viper в ios проектах

View

View Presenter Interactor Entity

Router

ПассивнаПередача событий в Presenter

Page 10: Viper в ios проектах

Interactor

View Presenter Interactor Entity

Router

Бизнес логика

Page 11: Viper в ios проектах

Presenter

View Presenter

Interactor Entity

Router

Центр принятия решений

Page 12: Viper в ios проектах

Entity

View Presenter

Interactor Entity

Router

Модельная сущность

Page 13: Viper в ios проектах

Router

View Presenter Interactor Entity

Router

Переходы между экранами

*Сборка модуля, НО!!!

Assembly

Page 14: Viper в ios проектах

СБОРКА МОДУЛЯ

Page 15: Viper в ios проектах

Слоистая архитектура

Presentation layer

Service layer

Core layer

Page 16: Viper в ios проектах

Слоистая архитектура

Presentation layer

Service layer

Core layer

View Presenter Interactor

RouterAssembly

Service Service

NetworkClient Mapper

Serializer Storage

Page 17: Viper в ios проектах

Пример

Page 18: Viper в ios проектах

View Presenter Interactor

Router

CityService

View

Page 19: Viper в ios проектах

View Presenter Interactor

Router

CityService

Presenter

Page 20: Viper в ios проектах

View Presenter

Interactor

Router

CityService

Interactor

Page 21: Viper в ios проектах

View Presenter Interactor

Router

CityService

Presenter

Page 22: Viper в ios проектах

obtainCities loadCities getCities:

Работа типового модуля

View

Presenter

Interactor

CityService

didLoadCities:

updateTable…

Page 23: Viper в ios проектах

Переходы между экранами (модулями)

CityServiceView Present

er Interactor

Router

Экран 1

View Presenter Interactor

Router

CityServiceЭкран

2

cityId<ModulInput>

Page 24: Viper в ios проектах

Переходы между экранами (модулями)

View ViewController ModelЭкран

2

<ModulInput>

CityServiceView Present

er Interactor

Router

Экран 1

cityId

Page 25: Viper в ios проектах

Какие минусы?

• Много классов• Из-за протоколов сложнее

перемещаться по коду

• «Время старта вашего приложения напрямую зависит от количества классов в нем»

• Увеличение времени разработки

Page 26: Viper в ios проектах

WWDC 2016, Optimizing App Startup Time…100 or 1000 classes isn’t a problem

Page 27: Viper в ios проектах

WWDC 2016, Optimizing App Startup Time…we’ve seen apps with 5-20,0000 classes

Page 28: Viper в ios проектах

WWDC 2016, Optimizing App Startup Time…add up to 800 milliseconds to your app launch time

Page 29: Viper в ios проектах

Кодогенерация

5 новых классов

5 новых протоколов

Один модуль это

https://github.com/bizibizi/BIZViperModuleGenerator

https://github.com/rambler-ios/Generamba

Page 30: Viper в ios проектах

ИТОГ

• Проект поделен на модули

• Бизнес логика отделена от UI

• Легкая расширяемость и поддержка

• Не только для ios

Page 31: Viper в ios проектах
Page 32: Viper в ios проектах

Спасибо за внимание!