Android Architecture Components #1 entendendo o MVVM (Model-View-ViewModel) em Kotlin

Além do suporte oficial à linguagem Kotlin, na I/O 2017 foi liberado (em fase de testes) um novo pacote de classes com o objetivo de resolver o problema do ciclo de vida das Activities e Fragments, e também definir um padrão a ser seguido no desenvolvimento de aplicações.

Um padrão a ser seguido: MVVM

De acordo com a especificação estabelecida, o MVVM (Model-View-ViewModel) é o padrão ideal para desenvolvimento de aplicações android. Nesse padrão, o VM expõe suas informações em forma de um Observable, e a View aguarda por atualizações.

Caso você esteja familiarizado com outro tipo de arquitetura como o MVP, aqui está a afirmação que me deu um click sobre a principal vantagem do MVVM:

The ViewModel is not tied to the view however — Eric Maxwell

Em outras palavras, ao contrário do MVP onde existe uma referência bidirecional entre a View o Presenter, no MVVM, o ViewModel não sabe quais Views recebem atualizações sobre seus eventos, o que é excelente, uma vez que o coupling do código é reduzido.

Outra similaridade entre o MPV e o MVVM, é que assim como o Presenter no MVP, no MVVM o ViewModel deve conter o código que faz a conexão entre a View e o Model. Idealmente o VM deve ser codificado em uma classe separada, essa classe deve estender à classe ViewModel presente no pacote dos architecture components:

class AutenticacaoViewModel : ViewModel() {
public val usuario = Usuario("Jefferson")
}

Uma vez que a classe AutenticacaoViewModel estende a classe ViewModel, as informações presentes nessa classe serão restauradas automaticamente pelo SO Android durante mudanças em tempo de execução, como por exemplo uma rotação de tela.

Uma vez criado, o ViewModel pode ser utilizado em uma Ativity ou Fragment, mas é importante ressaltar que não se deve criar instâncias dessa classe deliberadamente, ao invés, deve-se utilizar a classe ViewModelProviders:

class AutenticacaoActivity : LifecycleActivity() {
override protected fun onCreate(bundle: Bundle?) {
setContentView(R.layout.activity_autenticacao)
val viewModel = ViewModelProviders.of(this).get(AutenticacaoViewModel::class.java)

toast(viewModel.usuario.nomeUsuario)
}

Feito isso, todo o glue code entre sua Activity (View) e o domínio da sua aplicação (Model) deverá ser acessado por meio da instância de ViewModel, o qual será “observado” pelas Views que precisarem ser atualizadas quando houverem mudanças nesses dados.


Success is nothing more than a few disciplines, practiced every day. — Jim Rohn

Entender como aplicar o padrão MVVM no android é o primeiro passo para utilizar plenamente as classes disponibilizadas pelo pacote de architecture components. Nas próximas postagens iremos aprender um pouco mais sobre as demais classes disponíveis, então se você gostou dessa postagem, não se esqueça de compartilhar e me seguir para ficar atualizado.

Até a próxima.

Jefferson Tavares de Pádua

Written by

Android Associate Developer, ReactJS & NodeJS

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