ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS....

42
MVVM in Kotlin: ViewModel + LiveData

Transcript of ViewModel + LiveData MVVM in Kotlin · MVP VIPER CLEAN REDUX MVI RIB PRNSAASPFRUICC ARQUITETURAS....

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

“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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

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”

… 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”

… 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”

… 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”

… 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”

… 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”

… 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”

… 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”

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”

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”

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”

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”

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”

Ou simplesmente em:Dúvid

as?Obrigado

!