MVVM Model - View - ViewModel. Шаблон проектирования архитектуры приложения

Содержание

Слайд 2

Model - View - ViewModel Model-View-ViewModel — Шаблон представлен в 2005

Model - View - ViewModel

Model-View-ViewModel — Шаблон представлен в 2005

году Джоном Госсманом (John Gossman)
Цель - разделить приложение на 3 независимых слоя.
View - Activity/Fragment
Model (Repository) - работа с бизнес логикой (работа с базой данных Firebase, SQLite и другие)
ViewModel - является связующим звеном View с Model, а также хранит данные для View
Слайд 3

View Activity/Fragment Слой 1 Слой 2 Слой 3 ViewModel LiveData Repository

View

Activity/Fragment

Слой 1

Слой 2

Слой 3

ViewModel

LiveData

Repository

Model

Model

Room
(SQLite)

Firebase

Уведомляет View об изменении данных

с помощью наблюдения

Обработка событий полученных от пользователя. Отображение измененных данных.

Хранит данные для View

API для работы с Model

Бизнес логика, работа с данными

Слайд 4

Архитектурные компоненты Android Android Architecture Components Lifecycle LiveData ViewModel (AndroidViewModel) Navigation

Архитектурные компоненты Android
Android Architecture Components
Lifecycle
LiveData
ViewModel (AndroidViewModel)
Navigation

Слайд 5

Android Architecture Components. Dependencies Автор Юрий Петров vk.com/mobile_developing Dependencies def nav_version

Android Architecture Components. Dependencies Автор Юрий Петров vk.com/mobile_developing

Dependencies
def nav_version = "2.3.0-beta01"
def

lifecycle_version = "2.2.0"
def coroutines_version = "1.3.4"
// Lifecycle
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version "
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
// Dynamic Feature Module Support
implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
// Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version'
Слайд 6

Android Architecture Components Lifecycle https://developer.android.com/topic/libraries/architecture/lifecycle

Android Architecture Components Lifecycle

https://developer.android.com/topic/libraries/architecture/lifecycle

Слайд 7

Lifecycle. Activity Автор Юрий Петров vk.com/mobile_developing Жизненный цикл Activity onCreate(): вызывается

Lifecycle. Activity Автор Юрий Петров vk.com/mobile_developing

Жизненный цикл Activity

onCreate(): вызывается при создании

вашей Activity.
onStart(): осуществляется подготовка к выводу activity на экран.
onRestoreInstanceState(): восстановление данных
onResume(): activity видно на экране и может взаимодействовать с пользователем.
onPause(): фокусировка на другом Activity.
onSaveInstanceState(): сохранение данных
onStop(): activity больше не видна.
onDestroy: activity уничтожена
Слайд 8

Lifecycle. Fragment Автор Юрий Петров vk.com/mobile_developing Жизненный цикл Fragment onAttach(): связывание

Lifecycle. Fragment Автор Юрий Петров vk.com/mobile_developing

Жизненный цикл Fragment

onAttach(): связывание с Activity
onCreate():

инициализация фрагмента
onCreateView(): установка макета
onActivityCreated(): после установки макета
onStart(): фрагмент становится видимым
onResume(): фрагмент становится активным
onPause(): фрагмент становится не активным
onStop(): фрагмент становится видимым
onDestroyView(): удаление макета из фрагмента
onDestroy: фрагмент уничтожен
onDetach(): Отвязывание от Activity
Слайд 9

Android Architecture Components. Handling Lifecycle Автор Юрий Петров vk.com/mobile_developing Обработка жизненных

Android Architecture Components. Handling Lifecycle Автор Юрий Петров vk.com/mobile_developing

Обработка жизненных циклов

Компоненты

Lifecycle выполняют действия в ответ на изменение состояния жизненного цикла Activity или Fragment.
Lifecycle это класс, который содержит информацию о состоянии жизненного цикла Activity или Fragment, и позволяет другим объектам наблюдать за этим состоянием.
Слайд 10

Android Architecture Components. Handling Lifecycle Автор Юрий Петров vk.com/mobile_developing Обработка жизненных

Android Architecture Components. Handling Lifecycle Автор Юрий Петров vk.com/mobile_developing

Обработка жизненных

циклов

Компоненты Lifecycle выполняют действия в ответ на изменение состояния жизненного цикла Activity или Fragment.
Lifecycle это класс, который содержит информацию о состоянии жизненного цикла Activity или Fragment, и позволяет другим объектам наблюдать за этим состоянием. Lifecycle использует два основных перечисления для отслеживания статуса жизненного цикла для связанного с ним компонента:
Event - События жизненного цикла . Эти события влияют на события обратного вызова в Activity или Fragment.
State - Текущее состояние компонента, отслеживаемого Lifecycle объектом.
LifecycleOwner является интерфейсом, который обозначает, что у класса есть Lifecycle. У него есть один метод, getLifecycle().
LifecycleObserver интерфейс который дает возможность подписаться на Lifecycle.

Слайд 11

Android Architecture Components. Handling Lifecycle Автор Юрий Петров vk.com/mobile_developing Lifecycle.Event ON_ANY

Android Architecture Components. Handling Lifecycle Автор Юрий Петров vk.com/mobile_developing

Lifecycle.Event ON_ANY -

Отслеживание всех возможных событий.
Lifecycle.Event ON_CREATE - Отслеживание метода onCreate владельца жизненного цикла.
Lifecycle.Event ON_DESTROY - Отслеживание метода onDestroy владельца жизненного цикла.
Lifecycle.Event ON_PAUSE - Отслеживание метода onPause владельца жизненного цикла.
Lifecycle.Event ON_RESUME - Отслеживание метода onResume владельца жизненного цикла.
Lifecycle.Event ON_START - Отслеживание метода onStart владельца жизненного цикла.
Lifecycle.Event ON_STOP - Отслеживание метода onStop владельца жизненного цикла.

Events (события жизненного цикла)

Lifecycle.State CREATED - состояние создано для владельца жизненного цикла.
Lifecycle.State DESTROYED - состояние уничтожено для владельца жизненного цикла.
Lifecycle.State INITIALIZED - состояние инициализировано для владельца жизненного цикла.
Lifecycle.State RESUMED - состояние восстановлено для владельца жизненного цикла.
Lifecycle.State STARTED - состояние запущено для владельца жизненного цикла.

States (текущее состояние владельца жизненного цикла)

Слайд 12

Android Architecture Components LiveData https://developer.android.com/topic/libraries/architecture/viewmodel

Android Architecture Components LiveData

https://developer.android.com/topic/libraries/architecture/viewmodel

Слайд 13

Android Architecture Components. LiveData Автор Юрий Петров vk.com/mobile_developing LiveData является классом

Android Architecture Components. LiveData Автор Юрий Петров vk.com/mobile_developing

LiveData является классом для

хранения данных. В отличие от обычных данных, LiveData учитывает жизненный цикл. Это означает, что LiveData учитывает жизненный цикл компонентов приложения, таких как Activities, Fragments или Services. Эта осведомленность гарантирует, что LiveData обновляет только те компоненты приложения, которые находятся в состоянии активного жизненного цикла.

Методы

value - задать значение LiveData в главном потоке
postValue - задать значение LiveData из другого потока
Transformations.map - позволяет изменить тип LiveData

MediatorLiveData это подкласс LiveData, который может наблюдать за другими LiveData и реагировать на события от них.

Слайд 14

Android Architecture Components ViewModel https://developer.android.com/topic/libraries/architecture/livedata

Android Architecture Components ViewModel

https://developer.android.com/topic/libraries/architecture/livedata

Слайд 15

Android Architecture Components. ViewModel Автор Юрий Петров vk.com/mobile_developing ViewModel - это

Android Architecture Components. ViewModel Автор Юрий Петров vk.com/mobile_developing

ViewModel - это класс,

который отвечает за подготовку и управление данными для Activity или Fragment. Он также обрабатывает взаимодействие Activity / Fragment с остальной частью приложения (например, коммуникация с классами бизнес-логики).
Примечание : при смене ориентации экрана ViewModel не уничтожается.
Слайд 16

Android Architecture Components Navigation https://developer.android.com/guide/navigation

Android Architecture Components Navigation

https://developer.android.com/guide/navigation