Viper в ios проектах

Preview:

Citation preview

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

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

Recommended