MVVM in Kotlin:
ViewModel + LiveData
Quem somos
Eduardo Maia Patrick Steiger
Engenheiros de Software - CESAR
Android Embarcado
Android Associate Developers
psteigerehammo
Motiv
ation
Google I/O 2017
Pontos de dores dos devs
1.
2.
Gerenciamento de Ciclo de Vida
Ausência de Arquitetura
Recomendada
MVCMVP
VIPER
CLEAN
REDUX
MVI
RIB
PRNSAA
SPFRUI
CC
ARQUITETURAS
ARQUITETURAS - God Activity Arch
Outras classesActivity
Motiv
ation “God Activity”
Architecture
Anti-pattern God Object
Difícil de testar
Difícil de manter
Difícil de criar a atividade
Motiv
ation Google I/O 2017
Google introduz componentes
LiveData & ViewModel em uma arquiteturaMVVM
JetpackArchitecture Components
What we want to achieve (on our view)
LifeCycle
-Aware
ViewMode
l
Se destrói ao fim
Sobrevive à recriação
Notifica apenas observadores ativosSTARTED or RESUMED
LifeCycle
-Aware
LiveData
LiveData
Observer
Observer
Data changed? Notify!
MVVM
View
ViewModel
Model
View
ViewModel
Model
View:- Lógica de UI
ViewModel:- Retém Dados- Notifica View
Model:- Lógica de Negócio- Modelagem dos Dados- Armazenamento dos Dados- Entrega dados (ViewModel)
Constru
iremos View
ViewModel
Model
Caso de
Uso
“Talk is cheap. Show me
the code”一
Nosso objetivo final é usar:Activ
ityView
onSuccess { … }
onFailure { … }
Primeiro passo
Construir nosso modelo de dados
Model
Kotlin’s data classData
ClassModel
toString()User(name=Patrick, email=...)
copy()user.copy(email=...)
equals()/hashCode()
getters & setters
...
Model Kotlin’s data class
Data Class
Todos nossos dados tem um estado relativo ao seu carregamento na fonte:
Success
Failure
Model
Resource
Data Class
Resourc
e
Resourc
e
Model
Kotlin’s sealed class
Resourc
e
Model
Kotlin’s sealed class
Resourc
e
Model
Generics
Model
Resource
Data ClassLive
DataLiveData
LiveData de Recurso Genérico
LiveData de Recurso Genérico
// >= 1 observador ativo
// Nenhum observador ativo
LiveData de Recurso Genérico
Resource Repository ...
… usá-lo no ViewModel
… usá-lo no ViewModel
… usá-lo no ViewModel
… usá-lo no ViewModel
… usá-lo no ViewModel
… usá-lo no ViewModel
… usá-lo no ViewModel
Generic Versátil!
ActivityView Nosso objetivo final
ActivityView Nosso objetivo final
onSuccess onFailure
Implementação completa em:https://blog.usejournal.com/android-architecture-components-livedata-in-idiomatic-kotlin-cc626819db96
https://github.com/psteiger/Android_MVVM/
Dúvidas?Obrig
ado!
Ou simplesmente em:Dúvid
as?Obrigado
!