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:
- Criar métodos de validação específicos para cada campo que tenha particularidades (
validateAuthors
, validateThumbnail
). - 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.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!