(Des) Construindo Métodos
public interface IProdutoRepository {
List<Produto> listarTodos ();
Produto buscarPorId (int id);
void cadastrar (Produto produto);
}
Quando estamos trabalhando com o padrão Repository, desacoplando e separando responsabilidades, criamos uma interface contendo os métodos que deverão ser implementados (seja ela genérica ou não).
Caso você queira saber mais sobre este padrão, deixo dois links bem legais a disposição. Um utilizando Java e outro de Martin Fowler.
Mas o que me deixa um pouco incomodada e é um dos motivos deste texto, é o fato de passarmos as construções dos métodos como decoreba para àqueles que estão aprendendo. Portanto, vamos desconstruir essa parte.
Dado o contexto de uma lista de produtos (em que cada produto tenha id, nome e descrição), desejamos criar uma interface que possua os três métodos: buscar um produto por id, listar todos os produtos e cadastrar um produto.
public interface IProdutoRepository { }
Vamos realizar a construção dos nossos métodos da seguinte maneira:
- Ação que eu desejo realizar;
- Preciso de algo para realizar a ação?
- Preciso de algum retorno?
Vamos ao exemplo:
- Ação que eu desejo realizar; Desejo buscar um produto por id.
- Preciso de algo para realizar a ação? O id do produto que eu desejo encontrar.
- Preciso de algum retorno? Quero que me retorne o produto encontrado (em caso positivo hehe).
Show me the code!
Ação: buscar um produto por id.
buscarPorId();
Preciso de: um id para identificar qual produto eu quero buscar.
buscarPorId(int id);
O que ele me retorna? O produto encontrado (opa, espero que encontre).
Produto buscarPorId(int id);
Adicionando à interface:
public interface IProdutoRepository {
Produto buscarPorId(int id);
}
Vamos construir os outros dois que faltam em nosso exemplo.
Ação: listar todos os produtos.
listarTodos();
Preciso de algo? Não. Tenho algum parâmetro de entrada? Filtro? Não. Somente quero listar todos os produtos.
listarTodos();
Ele me retorna algo? A própria lista de produtos.
List<Produto> listarTodos();
Aumentando nossa interface:
public interface IProdutoRepository {
Produto buscarPorId(int id);
List<Produto> listarTodos();
}
Opa, mais um exemplo. Vamos treinar!
Ação: quero cadastrar um produto.
cadastrar();
Preciso? Do próprio produto que eu desejo cadastrar.
cadastrar(Produto produto);
Preciso de um retorno? Não para este cenário.
void cadastrar(Produto produto);
Finalizando a construção da nossa interface:
public interface IProdutoRepository {
Produto buscarPorId(int id);
List<Produto> listarTodos();
void cadastrar(Produto produto);
}
Ao começar a desenvolver os conteúdos para as aulas e a ter um contato maior com outros tipos de conteúdo, referências, exemplos, projetos e sempre outros grupos e pessoas, menos me limito a tecnologia. Tento criar, com minha equipe de trabalho, novos modelos para fugir do tradicional. Sair do “só sei que funciona” ou “só sei que é assim”, para fazê-los pensar ao invés de decorar. Fazê-los compreender ao invés de copiar e colar. E coloco o meu melhor para que eu consiga atingir este objetivo.
A tecnologia é a ferramenta que você utiliza para alcançar o seu objetivo. Faça com que seus alunos, funcionários e/ou colegas de trabalho, sejam seres que pensem fora da caixa. Isso tem me feito evoluir.
Pode ser simples para você, mas será que é para o outro? Ajude. Crie. Compartilhe. Seja e faça a diferença. Espero ter conseguido compartilhar um pouco do que criamos em nosso ambiente.
E ah, como sempre, por favor, caso algo não tenha ficado claro, você queira deixar sua sugestão, dicas, claps, comentários, eu estou e fico à disposição. Vamos sempre melhorar.
Um abraço e até breve!