viewmodel + livedata mvvm in kotlin · mvp viper clean redux mvi rib prnsaaspfruicc arquiteturas....
TRANSCRIPT
![Page 1: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/1.jpg)
MVVM in Kotlin:
ViewModel + LiveData
![Page 2: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/2.jpg)
Quem somos
Eduardo Maia Patrick Steiger
Engenheiros de Software - CESAR
Android Embarcado
Android Associate Developers
psteigerehammo
![Page 3: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/3.jpg)
Motiv
ation
Google I/O 2017
Pontos de dores dos devs
1.
2.
Gerenciamento de Ciclo de Vida
Ausência de Arquitetura
Recomendada
![Page 4: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/4.jpg)
MVCMVP
VIPER
CLEAN
REDUX
MVI
RIB
PRNSAA
SPFRUI
CC
ARQUITETURAS
![Page 5: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/5.jpg)
ARQUITETURAS - God Activity Arch
Outras classesActivity
![Page 6: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/6.jpg)
Motiv
ation “God Activity”
Architecture
Anti-pattern God Object
Difícil de testar
Difícil de manter
Difícil de criar a atividade
![Page 7: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/7.jpg)
Motiv
ation Google I/O 2017
Google introduz componentes
LiveData & ViewModel em uma arquiteturaMVVM
JetpackArchitecture Components
![Page 8: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/8.jpg)
What we want to achieve (on our view)
LifeCycle
-Aware
ViewMode
l
Se destrói ao fim
Sobrevive à recriação
![Page 9: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/9.jpg)
Notifica apenas observadores ativosSTARTED or RESUMED
LifeCycle
-Aware
LiveData
LiveData
Observer
Observer
Data changed? Notify!
![Page 10: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/10.jpg)
MVVM
View
ViewModel
Model
![Page 11: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/11.jpg)
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)
![Page 12: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/12.jpg)
Constru
iremos View
ViewModel
Model
![Page 13: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/13.jpg)
Caso de
Uso
![Page 14: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/14.jpg)
“Talk is cheap. Show me
the code”一
![Page 15: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/15.jpg)
Nosso objetivo final é usar:Activ
ityView
![Page 16: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/16.jpg)
onSuccess { … }
![Page 17: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/17.jpg)
onFailure { … }
![Page 18: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/18.jpg)
Primeiro passo
Construir nosso modelo de dados
Model
![Page 19: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/19.jpg)
Kotlin’s data classData
ClassModel
![Page 20: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/20.jpg)
toString()User(name=Patrick, email=...)
copy()user.copy(email=...)
equals()/hashCode()
getters & setters
...
Model Kotlin’s data class
Data Class
![Page 21: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/21.jpg)
Todos nossos dados tem um estado relativo ao seu carregamento na fonte:
Success
Failure
Model
Resource
Data Class
Resourc
e
![Page 22: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/22.jpg)
Resourc
e
Model
Kotlin’s sealed class
![Page 23: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/23.jpg)
Resourc
e
Model
Kotlin’s sealed class
![Page 24: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/24.jpg)
Resourc
e
Model
Generics
![Page 25: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/25.jpg)
Model
Resource
Data ClassLive
DataLiveData
![Page 26: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/26.jpg)
LiveData de Recurso Genérico
![Page 27: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/27.jpg)
LiveData de Recurso Genérico
// >= 1 observador ativo
// Nenhum observador ativo
![Page 28: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/28.jpg)
LiveData de Recurso Genérico
![Page 29: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/29.jpg)
Resource Repository ...
![Page 30: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/30.jpg)
… usá-lo no ViewModel
![Page 31: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/31.jpg)
… usá-lo no ViewModel
![Page 32: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/32.jpg)
… usá-lo no ViewModel
![Page 33: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/33.jpg)
… usá-lo no ViewModel
![Page 34: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/34.jpg)
… usá-lo no ViewModel
![Page 35: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/35.jpg)
… usá-lo no ViewModel
![Page 36: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/36.jpg)
… usá-lo no ViewModel
![Page 37: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/37.jpg)
Generic Versátil!
![Page 38: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/38.jpg)
ActivityView Nosso objetivo final
![Page 39: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/39.jpg)
ActivityView Nosso objetivo final
![Page 40: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/40.jpg)
onSuccess onFailure
![Page 41: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/41.jpg)
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!
![Page 42: ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS. ARQUITETURAS - God Activity Arch Activity Outras classes. tion “God Activity”](https://reader035.vdocuments.site/reader035/viewer/2022062414/5ec976ed12ef1a570951021a/html5/thumbnails/42.jpg)
Ou simplesmente em:Dúvid
as?Obrigado
!