Livro 3 - Projeto Agenda de Contatos - Parte 3
2. Recursos Envolvidos (Parte 3)
No desenvolvimento da terceira parte do aplicativo, vamos usar as seguintes tecnologias presentes no Android Jetpack: biblioteca Room para manipulação de banco de dados SQLite, padrão ViewModel e LiveData para fazer a vinculação de dados aos elementos da interface gráfica.
Componentes de Arquitetura
- Foi introduzido pelo Android Jetpack o pacote de componentes de Arquitetura (Architecture Components) para servir como um guia para construção de aplicativos. Nesse pacote está presentes diversas bibliotecas para tarefas comuns como gerenciamento dos ciclos de vida e persistência de dados.
- Os componentes de arquitetura ajudam você a construir um aplicativo robusto, testável e de fácil manutenção.
- Os componentes de arquitetura oferecem uma abordagem simples, flexível e prática nos livrando de ter que lidar com problemas comuns e nos focar nas funcionalidades do aplicativo.
Projeto de Arquitetura
- O projeto de Agenda de Contatos faz o uso dos componentes de arquitetura do Android e exemplifica a estrutura padrão recomendado pelo Android Jetpack:
- Na primeira e segunda parte do aplicativo fizemos a implementação da primeira camada da arquitetura. Nela usamos os fragmentos para construir as telas do aplicativo e configuramos as classes junto com a atividade (activity) principal para fazer a transição entre as telas.
- Nesta terceira parte do aplicativo vamos implementar as demais camadas e introduzir novos conceitos adotados na arquitetura proposta.
- Entity: Essa é uma classe de anotação utilizada para descrever uma tabela do banco de dados. Neste projeto específico, a classe Contact será utilizada para descrever as informações que devem ser armazenadas no banco de dados.
- SQLite: banco de dados nativo do Android. Cada aplicativo pode criar e gerenciar as suas tabelas em um banco de dados sandbox (isto é, apenas o aplicativo pode ter acesso ao banco criado, você não pode acessar um banco de dados de outro aplicativo do seu celular).
- DAO: Data Acess Object, padrão de projeto onde se cria uma classe para conter todas as operações (SQL) de um dado objeto. Nesse projeto específico, a classe ContactsDAO será empregada para definir as operações sobre a tabela de contatos.
- RoomDatabase: camada da biblioteca Room para abstrair as operações sobre um banco de dados SQLite. Esta classe usa os DAOs criados para fazer a manipulação dos dados salvos no banco de dados. Nesse projeto específico, a classe ContactsDatabase será empregada para fazer a criação da tabela no banco de dados.
- Repository: a classe repositório é um padrão de projeto empregado para que seja uma interface de comunicação entre a interface do aplicativo e o banco de dados. A vantagem de usar esse tipo de estratégia é que o repositório pode ser programado para gerenciar dados de múltiplas fontes por exemplo, sincronizar uma banco de dados local com um Web Service. Na Agenda de Contatos, vamos implementar a classe ContactsRepository.
- ViewModel: uma ViewModel é uma classe cujo propósito é servir dados a uma interface gráfica (fragmento). A ViewModel fará o meio termo entre a comunicação dos dados apresentados na interface gráfica e o repositório. No aplicativo Agenda de Contatos vamos ter três ViewModels uma para cada fragmento: MainViewModel, AddEditViewModel e DetailViewModel.
- LiveData: classe especial armazenar informações e notificar alterações em seu conteúdo. Esse tipo de classe pode ser "observado" por outro objeto e receber notificações quando seu valor é alterado garantindo que o objeto que está observando sempre tenha a última versão do conteúdo. Usamos essa classe para manipular a lista de contatos, pois a cada contato adicionado, editado ou removido, o fragmento será notificado e mostrará os dados sempre atualizados.