Very quick comparison between the most popular iOS application architectures (MVC, MVP, MVP) and introducing VIPER architecture with slight modifications of the canonical one.
3. MV(C/P/VM) подходы
• Model - предметные сущности или уровень
доступа к данным (классы “Person” или
“PersonDataProvider”)
• View - уровень представление (всё, что
начинается с UI-)
• Controller/Presenter/ViewModel - “клей” или
медиатор, который связывает между собой
View и Model
4. • много не структурированного кода
• монстр-файлы (+1000 строк)
• чрезвычайная сложность
• код не тестируем
7. Зачем думать об
архитектуре?
• сбалансированное распределение
ответственностей между сущностями со
строго определенными ролями
• тестопригодность
• скорость внедрения и легкость поддержки
существующего кода
16. View
отвечает за отображение данных на экране и оповещает
Presenter о действиях пользователя. Пассивен, сам никогда
не запрашивает данные, только получает их от Presenter.
20. Presenter
получает от View информацию о действиях
пользователя и преобразует её в запросы к Router’у,
Interactor’у, а также получает данные от Interactor’а,
подготавливает их и отправляет View для отображения
28. Кое-что упустили
• Wireframe слишком много
знает
• Interactor’ы все еще сложны
• ViewController’ы
обрабатывают таблицы и
коллекции
• общение между модулями
31. Проблема №1: Wireframe
• разделяется на две сущности: Router и
Assembly
• Router - переходы между модулями
• Assembly - сборка модуля и проставление
зависимостей
32.
33. Проблема №2: Interactor
• вводится дополнительный слой сервисов
• каждый из сервисов отвечает за работу с
определенным типом объектов модели
• Interactor становится фасадом для сервисов
34.
35. Проблема №3:
ViewControllers
• вынесение логики, не соответствующей роли
View в отдельный слой объектов, которые
называются DataDisplay
• эти объекты реализуют методы для
UITableViewDelegate и UITableViewDataSource,
а также их аналоги для коллекций
43. Некоторые выводы
• более “лёгкие”,
специфицированные классы
• отличная масштабируемость
задач между разработчиками
• никаких отговорок по
тестированию