CodeFest 2019. Евгений Ртищев (Сбербанк Онлайн) — iOS. Всё есть MVC: зачем же нужны другие архитектуры?

16b6c87229eaf58768d25ed7b2bbbf52?s=47 CodeFest
April 06, 2019

CodeFest 2019. Евгений Ртищев (Сбербанк Онлайн) — iOS. Всё есть MVC: зачем же нужны другие архитектуры?

За последние несколько лет сильно набирают популярность новые типы архитектур в мире iOS: MVCC, MVVM, MVP, VIPER, CleanSwift, YARCH и другие. Каждый доклад по ним начинается с тезиса, что MVC — это Massive View Controllers. Но на практике оказывается, что это не проблема MVC, а проблема вашего кода и конкретной реализации.

MVC — это фундамент, он элегантный и потрясающий, но при этом и самый сложный из всех архитектурных подходов.

В докладе хотелось бы поговорить о том как эффективно использовать MVC, свободно переходить от одной архитектуры к другой и как осознанно выбрать именно ту, которая подойдёт вашей команде и проекту.

Обязательно будут освещены аспекты, важные для любого типа архитектуры:
— Задачи и ответственности слоёв
— Границы слоёв
— Декомпозиция каждого слоя (особенно уровня моделей)
— Связанность и переиспользуемость
— Взаимодействие модулей (роутинг и передача параметров)

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 06, 2019
Tweet

Transcript

  1. 3.

    !3

  2. 4.

    MVC ‣Простой архитектурный дизайн ‣Вся ответственность в Controller ‣Massive View

    Controller ‣View связан c Controller ‣Слабая переиспользуемость ‣Невозможно писать тесты !4
  3. 9.

    MVC на самом деле: !9 ‣Самый сложный архитектурный дизайн ‣Гибкая

    и масштабируемая архитектура ‣View не связан жёстко c Controller ‣Можно писать тесты ‣MVC подчиняется SOLID ‣Архитектура совместимая с MVVM, VIPER, Flux и др.
  4. 11.

    !11

  5. 13.

    На практике !13 ‣Presenter обрастает логикой проксирования ‣UIKit залезает в

    Presenter ‣NSAttributedString ‣DataSource для UITableView, UICollectionView и др. ‣Дублирование DTO (Interactor –> Presenter, Presenter –> View)
  6. 14.

    На практике !14 ‣Роутинг ‣Смена иерархии (UIViewController, UIView) ‣Alerts, ActionSheet,

    SKSafariViewController ‣Передача параметров из модуля в модуль
  7. 15.

    Корни проблем ‣Нарушение инкапсуляции ‣Нарушение SOLID ‣Controller в MVC ==

    UIViewController ‣UIViewController == экран ‣Отсутствие разделения по слоям ‣Отсутствие договорённостей по наименованию !15
  8. 18.

    Типичный ViewController !18 ‣IBOutlets, constraints, setting Views ‣ViewDelegates + ViewDataSource

    ‣UIGestureRecognizer ‣NSManagedContext ‣URLSession ‣Filtering results ‣pushViewController ‣
  9. 24.

    !24 Model Controllers Model Networking SOA CoreData Data Accessors Rules

    Repositories & DAO Filter, map, combine Common Reused Rules Business logic of App
  10. 26.

    !26 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let

    controller = SomeViewController() navigationController?.pushViewController(controller, animated: true) } Нарушение инкапсуляции
  11. 27.
  12. 30.

    !30 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let

    controller = SomeViewController() controller.objectId = 12345 navigationController?.pushViewController(controller, animated: true) }
  13. 31.

    Новый номер Текущий номер Экран успешной смены номера Вводим текущий

    номер Вводим новый номер Пример Подтверждаем смену номера Контроллер смены номера Текущий номер Новый номер Текущий номер Новый номер Новый номер Текущий номер Состояние !31
  14. 32.

    Model First Architecture ‣aka Feature Driven Development ‣Сперва проектируйте Model

    и Model Controllers ‣Пишите тесты на Model и Model Controllers ‣Интерфейс должен быстро меняться ‣Переиспользуемость –> Заменяемость ‣ !32
  15. 36.

    !36 View Content Controller Container Controller Coordinating Controller Model Controller

    Model IBOutlets, constraints, settings Views, recognizers ViewDelegates, ViewDataSource Composing UIViewController Transitions, DI Model accessors, business logic, common rules Repositories, DAO, Network, CoreData, Storage View, Presenter Router, Presenter Interactor, Presenter Entity
  16. 37.

    Mindmap !37 ‣Massive View Controller is not your problem ‣Используйте

    4 типа контроллеров ‣Разделите ответственности ‣Избегайте связанности ‣Проектируйте от модели ‣Интерфейс должен меняться быстро ‣Тестируйте модель и Model Controllers
  17. 40.

    СБОЛ сейчас ‣115 iOS-разработчиков ‣90 команд ‣60 внутренних модулей ‣Objective-C

    и Swift ‣Строгая межмодульная архитектура ‣MVC, Clean, VIPER и их разновидности внутри модулей !40