Como criar um app Android com Koin e Room Database
Neste breve tutorial vamos criar e configurar um aplicativo Android Kotlin que utilizará o injetor de dependências Koin, assim como o banco de dados SQLite através do Room database seguindo as boas práticas recomendadas pela documentação oficial do Android. Vamos iniciar com uma visão geral sobre as duas ferramentas:
Koin é uma estrutura de injeção de dependência pragmática e leve para desenvolvedores Kotlin. Com uma curva de aprendizado pequena, o Koin é uma ferramenta muito poderosa para resolução de dependências de forma elegante.
Room database é uma camada de abstração sobre SQLite servindo como solução para a escrita de códigos clichês de acesso ao banco de dados. Assim como o Koin, o Room também possui uma curva de aprendizado pequena e traz muita elegância para o código.
1. Criar o projeto
Iniciaremos criando um novo projeto Kotlin no Android Studio. Para isso selecione a opção “Empty Activity”, informe o nome do projeto, o local onde ele será salvo e então clique em “Finish”.
2. Configurar as dependências
Com o projeto já criado adicione o plugin “kotlin-kapt” e as seguintes dependências no arquivo “build.gradle (:app)”:
Após adicionar o plugin e as dependências não se esqueça de sincronizar o projeto.
3. Configurar o Koin
Para iniciar a configuração do Koin no projeto precisamos primeiramente criar uma classe para estender a classe Application. Neste exemplo eu criei uma classe chamada “ExampleApplication”. Nessa classe vamos sobrescrever o método “onCreate” com o seguinte código:
Por enquanto esta é a configuração que precisamos do Koin, agora vamos criar nosso banco de dados Room e posteriormente voltamos para adicionar o módulo de injeção da instancia do banco de dados neste arquivo.
4. Criar o banco de dados
Antes de criar o banco de dados vamos criar um pacote chamado “database”, então dentro desse pacote crie uma classe abstrata chamada de “AppDatabase”. Para definir essa classe como um banco de dados precisamos utilizar a anotação @Database passando um array com as entidades (tabelas) e a versão do nosso banco, conforme o código abaixo:
Agora vamos criar um novo arquivo chamado “DatabaseModule” que conterá as instruções para que o Koin consiga nos fornecer uma instancia do banco de dados corretamente. Para isso crie uma variável chamada “database” dentro do arquivo “DatabaseModule”, conforme o código a seguir:
Utilizamos o “single” para gerar uma instancia única do banco de dados conforme recomenda a documentação oficial do Android. Então utilizamos a função databaseBuilder do Room para gerar a instancia do nosso banco de dados passando o nome do banco como “app”.
Agora precisamos registrar esse módulo na configuração do Koin que fizemos anteriormente na classe “ExampleApplication”. Para isso basta chamar a variável “database” dentro do “modules” conforme o código abaixo:
5. Criar a tabela e a classe DAO
Agora que já criamos nosso banco de dados vamos criar nossa primeira tabela. No Room as tabelas de banco de dados são representadas por classes com a anotação “@Entity”. Neste exemplo criaremos uma simples tabela de produtos, para isso crie um pacote dentro de “database” chamado “product” e então crie a classe “ProductEntity” dentro deste pacote conforme a imagem abaixo:
Agora vamos criar a interface DAO (Data Access Object) que é onde iremos adicionar nossas interações com o banco de dados. Para isso crie uma interface chamada “ProductDAO” dentro do pacote “product” conforme o código abaixo:
Para mais informações sobre as classes DAO do Room consulte a documentação oficial clicando aqui. Após criar a entidade que representa a tabela do banco de dados e a interface DAO precisamos registra-los em nossa classe “AppDatabase”.
Agora precisamos também registrar a interface DAO no modulo Koin do banco de dados para que o Koin saiba nos fornecer uma instancia da implementação dessa interface. Para isso utilizamos a função “get<>()” do Koin passando o tipo “AppDatabase” para que possamos acessar a função “productDao” que retornará uma instancia do DAO.
6. Criar o repositório
Agora já podemos criar o repositório e passar o DAO em seu construtor para que ele tenha acesso ao banco de dados. Também precisamos criar um modulo para gerar a instancia desse repositório e registrar o modulo na classe “ExampleApplication” conforme os códigos abaixo:
Com o repositório criado já podemos injeta-lo no view model, com isso finalizamos a configuração do aplicativo Android com Koin + Room. Esse projeto está disponível em meu github no link abaixo. Espero ter ajudado.
github.com/gustavowerle/app-koin-room
Até a próxima!
7. Referências:
https://developer.android.com/training/data-storage/room
https://insert-koin.io/