SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
VIPER
архитектура
Варианты
• MVC (Apple-style)
• MVP
• MVVM
MV(C/P/VM) подходы
• Model - предметные сущности или уровень
доступа к данным (классы “Person” или
“PersonDataProvider”)
• View - уровень представление (всё, что
начинается с UI-)
• Controller/Presenter/ViewModel - “клей” или
медиатор, который связывает между собой
View и Model
• много не структурированного кода
• монстр-файлы (+1000 строк)
• чрезвычайная сложность
• код не тестируем
MVC “в стиле Apple”
Зачем думать об
архитектуре?
• сбалансированное распределение
ответственностей между сущностями со
строго определенными ролями
• тестопригодность
• скорость внедрения и легкость поддержки
существующего кода
Clean architecture
Clean architecture
• независима от фреймворков
• тестируема
• независима от UI
• независима от базы данных
• независима от внешних сущностей
VIPER
Что такое VIPER?
• View
• Interactor
• Presenter
• Entity
• Routing
View
отвечает за отображение данных на экране и оповещает
Presenter о действиях пользователя. Пассивен, сам никогда
не запрашивает данные, только получает их от Presenter.
Interactor
содержит всю бизнес-логику, необходимую для
работы текущего модуля
Presenter
получает от View информацию о действиях
пользователя и преобразует её в запросы к Router’у,
Interactor’у, а также получает данные от Interactor’а,
подготавливает их и отправляет View для отображения
Entity
объекты модели, не содержащие никакой бизнес-
логики
Router
отвечает за навигацию между модулями
Основные принципы
• протоколы
• внедрение зависимостей
• разделение интерфейсов
Но…
Кое-что упустили
• Wireframe слишком много
знает
• Interactor’ы все еще сложны
• ViewController’ы
обрабатывают таблицы и
коллекции
• общение между модулями
Решение существует
rambler-style VIPER
Проблема №1: Wireframe
• разделяется на две сущности: Router и
Assembly
• Router - переходы между модулями
• Assembly - сборка модуля и проставление
зависимостей
Проблема №2: Interactor
• вводится дополнительный слой сервисов
• каждый из сервисов отвечает за работу с
определенным типом объектов модели
• Interactor становится фасадом для сервисов
Проблема №3:
ViewControllers
• вынесение логики, не соответствующей роли
View в отдельный слой объектов, которые
называются DataDisplay
• эти объекты реализуют методы для
UITableViewDelegate и UITableViewDataSource,
а также их аналоги для коллекций
Проблема №4: Передача
данных
• два выделенных протокола ModuleInput и
ModuleOutput
Очень много файлов
Кодогенерация
Generamba, VIPER gen, Boa
Тестирование
Моки наше всё
• сервисы
• interactor’ы
• presenter’ы
• view
• router’ы
• assembly
Некоторые выводы
• более “лёгкие”,
специфицированные классы
• отличная масштабируемость
задач между разработчиками
• никаких отговорок по
тестированию
Использовать VIPER или MV(C/P)?
–Альберт Эйнштейн
“Всё должно быть изложено так просто, как
только возможно, но не проще.”
Ресурсы к ознакомлению
• architecture patterns
• objc.io/viper
• clean architecture
• rambler-viper
• viper
Вопросы?
Спасибо за внимание!

Weitere ähnliche Inhalte

Andere mochten auch

Ревитализация жилых кварталов
Ревитализация жилых кварталовРевитализация жилых кварталов
Ревитализация жилых кварталовRoman Pomazan
 
Goroda - architecture festival
Goroda  - architecture festivalGoroda  - architecture festival
Goroda - architecture festivalSasha Kazantseva
 
CLI203 - VDI project Architecture
CLI203 - VDI project ArchitectureCLI203 - VDI project Architecture
CLI203 - VDI project ArchitectureSergey Khalyapin
 
HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...
HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...
HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...Empowered Presentations
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMMudasir Qazi
 
Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...
Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...
Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...Empowered Presentations
 
Что такое аналитика в маркетинге, зачем она нужна, и как ее готовить
Что такое аналитика в маркетинге, зачем она нужна, и как ее готовитьЧто такое аналитика в маркетинге, зачем она нужна, и как ее готовить
Что такое аналитика в маркетинге, зачем она нужна, и как ее готовитьMindbox
 

Andere mochten auch (8)

Ревитализация жилых кварталов
Ревитализация жилых кварталовРевитализация жилых кварталов
Ревитализация жилых кварталов
 
Goroda - architecture festival
Goroda  - architecture festivalGoroda  - architecture festival
Goroda - architecture festival
 
CLI203 - VDI project Architecture
CLI203 - VDI project ArchitectureCLI203 - VDI project Architecture
CLI203 - VDI project Architecture
 
HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...
HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...
HEY Olive Garden! We are sorry... #PowerPoint #OliveGarden #Darden #Starboard...
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVM
 
6 Reasons Why Hawaii Is #1
6 Reasons Why Hawaii Is #16 Reasons Why Hawaii Is #1
6 Reasons Why Hawaii Is #1
 
Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...
Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...
Thirstier - Time is short. We are running out. #drought #California #SaoPaulo...
 
Что такое аналитика в маркетинге, зачем она нужна, и как ее готовить
Что такое аналитика в маркетинге, зачем она нужна, и как ее готовитьЧто такое аналитика в маркетинге, зачем она нужна, и как ее готовить
Что такое аналитика в маркетинге, зачем она нужна, и как ее готовить
 

Ähnlich wie VIPER architecture

Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
 
Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsAndrey Vernigora
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"GeeksLab Odessa
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.jsTimur Shemsedinov
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Ontico
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Provectus
 
Сложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковСложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковz-tech
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
система высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Auroraсистема высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений AuroraAlex Povar
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Rambler.iOS #1: Nimbus Kit Models
Rambler.iOS #1: Nimbus Kit ModelsRambler.iOS #1: Nimbus Kit Models
Rambler.iOS #1: Nimbus Kit ModelsRAMBLER&Co
 
Mvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsMvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsIvan Dyachenko
 
04 - Базы данных. Архитектура СУБД
04 - Базы данных. Архитектура СУБД04 - Базы данных. Архитектура СУБД
04 - Базы данных. Архитектура СУБДRoman Brovko
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)Alexander Gornik
 

Ähnlich wie VIPER architecture (20)

Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systems
 
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
 
Сложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковСложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворков
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
система высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Auroraсистема высоконагруженных распределенных вычислений Aurora
система высоконагруженных распределенных вычислений Aurora
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Rambler.iOS #1: Nimbus Kit Models
Rambler.iOS #1: Nimbus Kit ModelsRambler.iOS #1: Nimbus Kit Models
Rambler.iOS #1: Nimbus Kit Models
 
Mvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsMvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patterns
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
04 - Базы данных. Архитектура СУБД
04 - Базы данных. Архитектура СУБД04 - Базы данных. Архитектура СУБД
04 - Базы данных. Архитектура СУБД
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 

VIPER architecture