Como controlar estados da View usando Sealed Class

Um código mais organizado na comunicação entre a ViewModel e a View.

Jean Dobler
Dec 9, 2019 · 3 min read

Algo que deve incomodar muitos desenvolvedores atualmente é o modo como a ViewModel se comunica com a View. Boa parte dos exemplos que encontramos na internet funcionam bem, porém acaba não sendo uma solução centralizada e, com o tempo, dependendo do tamanho do seu app, deixa o código bem desorganizado.

Neste post vamos mostrar uma solução simples para esse problema, utilizando um pouco do conceito de Programação Reativa. A ideia é ter apenas 1 meio para controlar o fluxo de mensagens de uma parte da aplicação, com uma Sealed Class para montar a hierarquia de “estados de tela” e 1 observer na View para receber as mensagens.

Tem exemplos para ficar mais claro? Sim, tem exemplos! Neste código vamos consultar uma lista de filmes para serem exibidos e usar a ViewModel para pegar os dados do Repository e Retornar a View.

Primeiro um exemplo sem a solução.

Parece que ficou bom desse jeito, não é? Simples e prático, mas a vida é uma caixinha de surpresas. E se quisermos agora mostrar uma mensagem de erro, como faríamos?

Começou a ficar bagunçado!

Agora a View precisa ter 2 observers separados e, se quisermos adicionar mais ações, teremos que ficar criando Observers infinitamente ou começarmos a tirar a lógica do ViewModel e colocarmos na View, removendo essa centralização de controle que estamos tentando criar.

Vamos agora aplicar o conceito do post para organizar o envio de mensagens entre ViewModel e a View.

Primeiro, criamos uma Sealed Class que vai representar os “estados da tela”. No nosso caso, como estamos na tela de Movie vamos criar a MovieViewState (sim, criamos um state para cada View).

Agora, dentro da ViewModel vamos instanciar um MutableLiveData, que vai receber o tipo da SealedClass que acabamos de criar ao invés da lista de filmes.

Para aplicações menos complexas, que não exigem muitas customizações de estado de tela, podemos criar uma SealedClass genérica. Vamos chamá-la de NetworkViewState.

Ficou bem melhor, não é mesmo? Agora podemos adicionar varias interações com a View, mantendo a mesma estrutura e deixando o código bem mais organizado. Ficou alguma dúvida ou tem alguma coisa a dizer? Deixe um comentário. Até a próxima!


Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade…

Thanks to Diego Malone and Wesley Jonathan Marcolino

Jean Dobler

Written by

Android and FullStack Web developer, World Of Warcraft Lover, Piranha Plant Player(SSBU) and a father of 2 cats

Concrete

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

More From Medium

More on Artigos from Concrete

More on Artigos from Concrete

Era uma vez… uma Daily!

Apr 2 · 7 min read

20

More on Artigos from Concrete

More on Artigos from Concrete

Prodcast #6 — Entretenimento

Apr 1 · 1 min read

17

More on Artigos from Concrete

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade