(Des) Construindo Métodos

Helena Strada
3 min readMay 6, 2019

--

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:

  1. Ação que eu desejo realizar;
  2. Preciso de algo para realizar a ação?
  3. Preciso de algum retorno?

Vamos ao exemplo:

  1. Ação que eu desejo realizar; Desejo buscar um produto por id.
  2. Preciso de algo para realizar a ação? O id do produto que eu desejo encontrar.
  3. 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!

--

--

No responses yet