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

Post on 22-May-2020

12 views 1 download

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

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

!