1
resposta

Validador unico

Ola!

Visando otimizar e diminuir o codigo, poderia ter criado apenas um validador que recebesse duas variaveis (map e texto/link) para ser usado nas validacoes na criacao do modelo ou isso nao seria uma boa pratica em relacao a facilidade de leitura?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oii, Guilherme.

Sua dúvida é muito boa e aparece bastante quando falamos de refatoração e boas práticas em Flutter.
A ideia de um validador único:

Você sugeriu criar um único método de validação que recebesse dois parâmetros (o map e a chave do dado, como título, autores, descrição, etc.) e retornasse o valor tratado (com fallback em caso de null).

Por exemplo, algo assim:

String validateField(Map<String, dynamic> map, String key, String fallback) {
  return map[key] == null ? fallback : map[key];
}

E então seria chamado dentro do fromApi() mais ou menos assim:

title = validateField(map["volumeInfo"], "title", "Título desconhecido");
description = validateField(map["volumeInfo"], "description", "Sem descrição");

Vantagens dessa abordagem:

  • Redução de código repetido: em vez de escrever várias condições ternárias semelhantes, você centraliza a lógica em uma única função.
  • Facilidade de manutenção: se amanhã você quiser mudar a lógica de validação (por exemplo, adicionar trim, ou tratar strings vazias), basta alterar em um lugar só.
  • Generalização: funciona para qualquer campo textual simples.

Desvantagens:

  • Leitura menos explícita: quem lê o código não vai ver imediatamente o que está acontecendo em cada campo, apenas verá chamadas ao mesmo validador. Isso pode exigir abrir a função auxiliar para entender o que está sendo feito.
  • Casos específicos ficam mais difíceis: por exemplo, authors não é apenas um texto, mas uma lista que precisa ser convertida em String. Nesse caso, o validador genérico não cobre bem e você precisaria de exceções dentro da função, o que complica a manutenção.
  • Perda de clareza semântica: métodos como validateTitle(), validateAuthors() tornam o código mais legível, pois deixam claro o que está sendo validado.

Boa prática recomendada

O que você propôs não é errado, pode funcionar bem para campos bem padronizados (como strings simples).
Mas, pensando em boas práticas de arquitetura e legibilidade do código, é melhor:

  1. Criar métodos de validação específicos para cada campo que tenha particularidades (validateAuthors, validateThumbnail).
  2. Usar um validador genérico apenas quando os campos forem simples e realmente repetitivos.

Desse jeito, você encontra um equilíbrio entre:

  • menos repetição de código,
  • e maior clareza e semântica.

Espero ter ajudado.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!