Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Presentation Layer 2018

Presentation Layer 2018

Alexander Blinov

August 03, 2018
Tweet

More Decks by Alexander Blinov

Other Decks in Technology

Transcript

  1. Обо мне Руководитель Android практики Соавтор Moxy Соведущий подкастов Админ

    чата по архитектуре Android Выступаю на конференциях Александр Блинов [email protected]
  2. 1 Требования к presentation слою Содержание 2 Какие существуют подходы

    3 Какие существуют реализации 4 Открытые вопросы 5 Подведение итогов
  3. ‘On’ что-то произошло Команды на изменения MVP Presenter View Interactor

    Repository Data Service Model ВЗАИМОДЕЙСТВИЕ НЕ ВАЖНО!!!
  4. MVP Presenter View Установка view в presenter Что-то произошло у

    пользователя Обработка запроса в бизнес моделе Вызов метода на изменение части интерфейса Отрисовка изменений интерфейса Удаление view из presenter
  5. Interactor Repository Data Service Model MVVM View Model View ‘On’

    что-то произошло ВЗАИМОДЕЙСТВИЕ НЕ ВАЖНО!!! (presenter) var a var b
  6. MVVM VIewModel View Подписка на свойства view model Что-то произошло

    у пользователя Обработка запроса в бизнес моделе Observe изменений свойств Отрисовка изменений интерфейса Установка свойств модели Отписка от свойств view model
  7. MVPI Presenter Intent b View Intent a Подписка на ViewState

    Interactor Repository Data Service Model ВЗАИМОДЕЙСТВИЕ НЕ ВАЖНО!!!
  8. MVI Presenter View Установка view в presenter Observe событий пользователя

    (Intents) Обработка запроса в бизнес моделе Observe ViewState Отрисовка изменений интерфейса • Подписка на события (Intents) • Подписка на ViewState Reduce состояния Намерение на взаимоотписку • Отписка от событий (Intents) • Отписка от ViewState
  9. Критерий MVP MVVM MVI Обработка переворота экрана + + +

    DI + + + Routing + ? ? Animation + ? + UI Testing + + ++
  10. EasyMvp Presenter View Interface Fragment Delegate Loader 1 - 1

    1 - 1 1 - 1 1 - 1 1 - 1 Диаграмма классов
  11. EasyMvp Presenter View Interface Fragment Delegate Loader Способ работы Создает

    делегат 1 2 Достает presenter / инстанциирует его Связывает Fragment и Presenter 3 Сообщает о событии Вызывает метод
  12. Nucleus Presenter Fragment Delegate Presenter Storage 1 - 1 0..*

    - 1 1 - 0..* 0..1 - 1 1 - 0..1 Диаграмма классов
  13. Presenter Fragment Delegate Presenter Storage Создает делегат Достает presenter /

    инстанциирует его Способ работы Связывает Fragment и Presenter Сообщает о событии Вызывает метод 1 2 3 Обработка restartable Nucleus
  14. ThirtyInch Presenter View Interface Fragment Delegate Presenter Savior 1 -

    1 0..* - 1 1 - 0..* 0..1 - 1 1 - 1 Диаграмма классов View Interface Proxy
  15. ThirtyInch Presenter View Interface Fragment Delegate Presenter Savior Создает делегат

    View Interface Proxy Достает presenter / инстанциирует его Способ работы Оборачивает View Proxy, Связывает Fragment и Presenter Сообщает о событии Через proxy* вызывает метод 1 2 3 Обработка интерсепторов
  16. Fragment Mosby Presenter View State Delegate Presenter Manager 1 -

    1 View Interface 0..* - 1 1 - 0..* 0..1 - 1 Диаграмма классов 1 - 1 0..1 - 1
  17. Presenter Mosby View State Fragment Delegate Presenter Manager Создает делегат

    View Interface Достает presenter / инстанциирует его Способ работы Связывает Fragment и Presenter Сообщает о событии Вызывает метод у view 1 2 3 Сохраняет / восстанавливает состояние
  18. Fragment Moxy Presenter View Interface Delegate Presenter Store 1 -

    1 View State 0..* - 1 1 - 0..* 0..* - 1 1 - 1 Диаграмма классов 1 - 1
  19. Presenter Moxy View Interface Fragment Delegate Presenter Savior Создает делегат

    View State Достает presenter / инстанциирует его Способ работы Связывает Fragment, Presenter и ViewState Сообщает о событии Вызывает команду у view 1 2 3 Вызывает метод Обработка стратегий
  20. Attribute EasyMvp Nucleus ThirtyInch Mosby Moxy Кол-во презентов на view

    Ровно один Ровно один Ровно один Ровно один Несколько место задания presenter аннотация @ActivityView, @FragmentView, @CustomView у класса view аннотация @RequiresPresenter указывается у класса view переопределяем метод createPresenter у класса view переопределяем метод createPresenter у класса view аннотации @InjectPresenter @ProvidePresenter Presenter constructors • Конструктор по умолчанию • Inject аннотация из JSR 330 • Конструктор по умолчанию • Передается в onCreate фабрика по созданию презентера Конструктор с параметрами создается в типизированном метод createPresenter Конструктор с параметрами создается в типизированном метод createPresenter • Конструктор по умолчанию • Конструктор с параметрами в методах с аннотациями @ProvidePresenter
  21. Attribute EasyMvp Nucleus ThirtyInch Mosby Moxy Presenter Binding compile time

    кодогенерация + модификация bytecode: - генерируются провайдер презентера - при модификации байткода привязывется провайдер - при инициализации класса вызывается конструктор презентера / ждет ручного задания Reflection / Factory - приинициализац ии класса вызывается фабрика - По умолчанию ReflectionFactory по аннотации @RequiresPresente r вызывает дефолтный конструктор Explicit - при инициализации явно создает инстанс презентера в колбэке view Explicit - при инициализации явно создает инстанс презентера в колбэке view compile time кодогенерация Android классы в презенте - Bundle - - -
  22. Attribute EasyMvp Nucleus ThirtyInch Mosby Moxy Место хранения презентеров Loader

    Презентеры живут пока не финиширует вью Singleton - PresenterStorage Презентеры живут пока не финиширует вью Singleton
 PresenterSavior Регулируется при помощи конфигурации при создании Singleton
 PresenterManager Singleton
 PresenterStorage События при detached view Теряются Выполняются со стратегией Выполняется с интерсептором через InvocationHandler Теряются Выполняются со стратегией Сохранение состояния - На основе restartable Полуавтоматическ ое на 
 Rx subject ручное во ViewState Автоматическое во ViewState Восстановление после уничтожения системой - Rx restartable - ручное во ViewState -
  23. Attribute EasyMvp Nucleus ThirtyInch Mosby Moxy Наследование от базовых классов:

    Fragment, Activity, Custom View от базовых классов Android наследование от базового класса либо композиция с делегатом наследование от базового класса либо композиция с делегатом наследование от базового класса наследование от базового класса либо композиция с делегатом исключения для Proguard - Presenter Distinct Comparator - - Информация по работе Патчинг байткода + кодеин Сложная логика операций Много рефлексии Много писать руками Команды у вью
  24. JetPack View Model Fragment View Model Provider Holder Fragment (retain)

    1 - 1 0..* - 1 <create> Диаграмма классов Factory 1 - 0..* View Model Store 1 - 1 1 - 1 1 - 1 View Model Providers View Model Stores Holder Fragment static
  25. JetPack View Model Fragment View Model Provider Holder Fragment (retain)

    Способ работы Factory View Model Store 1 - 1 View Model Providers View Model Stores Запрашиваем инстанс View Model Provider 1 Запрашиваем инстанс View Model Store 2 Holder Fragment static 3 Запрашиваем инстанс Holder Fragment Создаем инстанс Factory 0
  26. Fragment Mosby MVI Presenter View State Delegate Presenter Manager 1

    - 1 View Interface 0..* - 1 1 - 0..* 0..1 - 1 Диаграмма классов 1 - 1 1 - 1 1 - 1 1 - 1
  27. Mosby MVI Presenter View State View Interface Способ работы Fragment

    Delegate Presenter Manager Создает делегат Достает presenter / инстанциирует его Связывает Fragment и Presenter 1 2 3 Подписывается на интенты Подписывается на View State
  28. Выводы В MVP Moxy выглядит самым крутым MVVM JetPack не

    требует общего хранилища MVI Mosby супертестируемо, но пока сыровато
  29. Presenter / View Model Android System Android View Конфликт состояний

    Interactor Repository Data Service Model Сохранение состояния
  30. Presenter / View Model Android System Android View Конфликт состояний

    Interactor Repository Data Service Сохранение состояния Runtime Состояние
  31. Presenter / View Model Android System Android View Конфликт состояний

    Interactor Repository Data Service Сохранение состояния Runtime Состояние • Ошибки • Загрузка • Списки • Объекты • Bitmap
  32. Presenter / View Model Android System Android View Конфликт состояний

    Interactor Repository Data Service Сохранение состояния 1 3 Начальная загрузка 2 Модификация Сохранение при моде фиксации Runtime Состояние
  33. О чем мы говорили? MVP - JetPack - RxPM? -

    EasyMVP - Nucleus - ThirtyInch - Mosby - Moxy MVVM MVI - Mosby - Moxy? Выводы Вопросы по presentation слою закрыты. Почти Не бойтесь экспериментировать! Думайте! Изучайте исходники Мысли по реализациям В MVP Moxy выглядит самым крутым MVVM JetPack не требует общего хранилища MVI Mosby супертестируемо, но пока сыровато Суперидея