2. Quem eu sou?
Engenheiro de Software independente e
freelancer.
Apaixonado por IoT e desenvolvimento mobile,
gasto as poucas horas que me restam para brincar
com coisa novas que pintam no mercado.
github.com/victoraldir
about.me/victoraldir
3. 2. Cronograma
Fluxo de pensamento, da nossa
apresentação.
➔ Motivação
Vamos discutir brevemente o que
motivou a Google disponibilizar os
componentes
➔ Entender os componentes
Entender um pouco mais sobre o
Lifecycle, ViewModel, Livedata e
Room
➔ MVP, MVVW e MVP-VM
Vamos discutir brevemente sobre cada
representaçāo
4. Design estrutural de uma
solução pautada em
NECESSIDADES e
ORÇAMENTO
Importante
Toda e qualquer
decisão tomada nesse
estágio, poderá definir
de forma positiva ou
negativa o futuro da sua
empreitada.
Tente ser assertivo
porém seja dinâmico
Okay, mas o que é
Arquitetura?
5. Motivação para criação dos
componentes
Era realmente
necessário?
Comunidade
Apesar da explosão de
adesões de
desenvolvedores, a
google realmente
nunca se preocupou
em definir uma
guideline de arquitetura.
6. I/O 17
A Google disponibilizou a primeira
versāo de um set de componentes
estruturais para tornar Apps Android
escaláveis, testáveis e robustas.
Atualmente na versão 1.0.0
Anúncios
7,000 desenvolvedores
acompanhando 101
novidades em diferentes
produtos da Google
- 2 bilhōes de
dispositivos
- Android Studio 3
- Kotlin
- Architecture
8. Room
Biblioteca de persistência ORM que
fornece um significativo nível de
abstração para se trabalhar com
SQLite.
➔ Quando usar?
Quando sua App exigir persistência de dados.
Uma camada de cache para melhorar
experiência uso da app quando offline.
➔ Esforço?
Minimo, sério! Crie o seu POJO (@Entity), DAO
(@Dao), Database (@Database informando as
entidades que compoe o seu banco.
Fonte: developer.android.com Figure 1. Room architecture diagram
10. https://github.com/googlecodelabs/android-persistence
➔ O que vou ver?
◆ 5 passos para entender características básicas do Room
◆ Importância de manter a main thread livre de operações com
banco.
◆ O suporte do Room com LiveData possibilitando que a sua
View reaja a mudanças do banco sem esforço
Codelab for Room
11. ViewModel
Possibilita que UI interaja com a
camada de dados de forma simples e
confiável, pois tem um ciclo de vida mais
longo em relação ao UI Controller,
permitindo que dados utilizados pela UI
sejam mantidos nela.
Instâncias criadas via Provider
12. ViewModel
Fornece uma maneira de criar e
recuperar objetos vinculados a um ciclo
de vida específico. Um ViewModel
normalmente armazena o estado dos
dados de uma View e se comunica com
outros componentes, como repositórios
de dados ou camadas de domínio lógico
Usage list
- Vincule UI Controllers ao seu
Data Model
- Compartilhe dados entre
Fragments
- Substitua Loaders
- Substitua AsyncTaskLoader
15. Lifecyle and LifecyleOwner
Mantedor de estados de um determinado componente (Activity e
Fragments, por exemplo).
LifecycleOwner
Fragment ou Activities. Funcionam como Obervables
LifecycleObservers
Qualquer objeto que implemente LifecycleObserver pode se
inscrever no LifecycleOwner para receber eventos
20. LiveData
O LiveData é uma classe de suporte de dados Observable. Ao contrário de um
tradicional Observable, o LiveData é consciente do ciclo de vida, o que significa
que respeita o ciclo de vida de outros componentes do aplicativo
Nota
Observables só são
notificados quando
Views estão em estado
de RESUMED ou
STARTED
21. Codelab para ViewModel e
LiveData (super indico!)
https://codelabs.developers.google.com/codelabs/android-lifecycles/#0
➔ O que vou ver?
Fazer um cronômetro parar de resetar em mudança de
configuração e comunicação entre fragments usando um
ViewModel em comum
Criar o seu próprio componente (que usa o LocationManager)
implementando LifeCycleObserver
22. MVP ou MVVW?
- O MVC você já tem. O problema é que o ‘C’
não te pertence
- O MVP é uma opção fácil de entender
- O MVVW se a sua intenção é trabalhar com
databinding, então essa é a melhor pedida.
Google indica essa opção no guia de
arquitetura
23. Fonte: android.jlelse.eu
Nota
Podemos usar o
ViewModel entre o Model
e o Presenter nessa
arquitetura e tirar proveito
do longo ciclo de vida do
componente, evitando
carregar dados em
mudanças de
configuração.
24. Fonte: developer.android.com
MVVW
Nota
Uso do MediatorLiveData
para combinar dados
oriundos de fontes remotas
e locais. Assim como o
LiveData, trata-se de um
Observable que é capaz de
gerar um LiveData a partir
da combinação de outras
fontes
25. Teste
● User Interface & Interactions (lentos)
○ Espresso
● ViewModel
○ JUnit e Mockito para mockar operações com o
repositório
● UserRepository
○ Mock DAO com mockito e mock Webservice com
MockWebServer lib
26. Fluxo de entendimento
Fluxo de entendimento
1. Entender do que se trata cada componente.
a. https://developer.android.com/topic/libraries/architect
ure/index.html
2. Codelab for ViewModel and LiveData
a. https://codelabs.developers.google.com/codelabs/and
roid-lifecycles/#0
3. Codelab for Room
a. https://codelabs.developers.google.com/codelabs/and
roid-persistence/#0
4. Ler o Guide to App Architecture
a. https://developer.android.com/topic/libraries/architecture
/guide.html
5. Explorar googlesamples/android-architecture no GitHub
27. XYZNote sample (em construção)
git clone https://github.com/victoraldir/XYZNotes.git