Skip to content

Aplicativo android para cadastro de contatos aplicando padrões de design

Notifications You must be signed in to change notification settings

bhfsilva/projeto-android-lista-contatos

Repository files navigation

Projeto lista de contatos

Kotlin

📝 Sobre o projeto

  • Projeto realizado durante a fase 5 - App World da graduação FIAP;
  • Trata-se de um aplicativo para cadastro de contatos.

Design Patterns aplicados

Padrões de design (Design Patterns) são aplicados para uma melhor organização de projetos, assim facilitando a manutenção e compreensão de partes da aplicação.

MVC

O design pattern Model-View-Controller (Modelo-Visualização-Controle) tem como propósito separar as camadas da aplicação, aonde:

  • Model → Representa a estrutura dos dados da regra de negócio da aplicação, assim centralizamos a estrutura das tabelas do banco de dados e das classes que as representam;
  • View → Representa a interface da aplicação, renderizando os dados contidos nas estruturas da camada Model;
  • Controller → Realiza a integração entre as camadas de Model e de View, acessando o banco de dados e capturando dados inseridos pelo usuário.

Aplicamos o MVC separando as responsabilidades das classes, aonde cada arquivo representa uma camada do MVC:

DTO

O design pattern Data Transfer Object (Objeto Transferidor de dados) tem como propósito fornecer métodos para acesso ao banco de dados, configurando quais métodos poderão ser executados para transferência de dados para o banco.

Aplicamos o DTO na interface ContatoDao.kt que, por meio das anotações, fornece os métodos a serem implementados para realizarmos o CRUD (operações CREATE, READ, UPDATE e DELETE) nas tabelas do banco de dados. A classe ContatoDb possui o método .contatoDao() que nos retorna uma instância da interface ContatoDao, isso é possível pois a biblioteca Room Database usada no projeto realiza o proxy dessa interface, instanciando-a e retornando essa instância.

State Hoisting

O design pattern State Hoisting (Elevação de estado) tem como propósito a divisão de obrigações dos componentes da aplicação, aonde um componente pai fornece a lógica da aplicação para os componentes filhos. Esses componentes filhos ficam encarregados de apenas renderizar o conteúdo recebido do componente pai, assim centralizando a lógica da aplicação.

Aplicamos o State Hoisting no arquivo MainActivity.kt, aonde o componente pai ContatosScreen armazena as funções e as passa para os componentes filho ContatoForm e ContatoList que as recebem como argumentos.

Singleton

O design pattern Singleton (Coisa única) tem como propósito haver apenas uma única instância de uma classe que é usada e acessada por todos os componentes da aplicação.

Aplicamos o Singleton na classe ContatoDb no método .getDatabase() que retorna uma instância única da classe ContatoDb para que a conexão com o banco de dados fique centralizada, isso é feito utilizando o bloco companion block do Kotlin que permite a criação de códigos estáticos, e o modificador lateinit na propriedade instance que permite a inicialização tardia de classes.

👥 Colaboradores

  • Celso Furtado (instrutor);
  • Bruno Henrique;

🛎 Considerações

  • Por enquanto nenhuma validação para a entrada de dados foi aplicada ao projeto;
  • Texto autoral, redigido por Bruno Henrique;
  • Caso encontre bugs ou tenha sugestões, abra uma issue ou entre em contato.