DEV Community

Pedro Paulo Silva
Pedro Paulo Silva

Posted on

Múltiplas validações com o Laravel Pipeline

É quase certo que você já esteve na situação de ter que validar um objeto através de diversas condições. Nessas situações o comum é ir adicionando if's, cada um validando uma condição específica. E não há nada de errado nisso, é uma maneira prática e você resolveu seu problema inicial.

Contudo, com o passar do tempo mais condições vão aparecendo e o que eram 3 if's agora são 15 e seu código começa a ficar muito complexo (se você usa alguma ferramenta para inspecionar o código como o PHP Mess Detector, ele literalmente irá reclamar do seu código dizendo que está complexo demais).

Para diminuir essa complexidade de um trecho de código, podemos aplicar um pattern chamado Pipeline Pattern.
Resumidamente esse pattern cria uma "linha de montagem" com várias etapas sequenciais e passa seu objeto através dessas etapas, retornando o resultado ao final. Essa "linha de montagem" pode, por exemplo, manipular seu objeto, adicionando, atualizando ou removendo atributos. E também pode realizar validações nesse objeto, que é o que faremos aqui.

Diagrama Pipeline

No Laravel temos uma implementação desse pattern (Illuminate\Pipeline\Pipeline) e é ela que vamos usar hoje para refactor o trecho de código a seguir.

Exemplo

Exemplo

Refatoração

Primeiramente vamos criar 3 classes para fazer as validações isoladamente.

Validar Email

Validar Idade

Validar Cpf

E agora vamos usar a implementação da Pipeline que existe Laravel.

Refatoração

Dessa forma o objeto $usuario irá passar por todas as validações e ao final será retornado.

Você pode, também, reaproveitar as validações já existentes e organizá-las de outras formas, criando outras validações, por exemplo, uma que só valide os meios de contato do usuário. Como abaixo:

Image description

Conclusão

Como podemos ver, com o uso desse pattern as reponsabilidades de cada validação ficam separadas e muito melhor organizadas. Assim permitindo que a adição, exclusão e manutenção das validações seja feita de maneira muito mais fácil.

Discussion (1)

Collapse
moreiraandre profile image
André Moreira

Muito show Pedro, obrigado pela postagem! Eu não sabia que já havia esse padrão no Laravel disponível para fácil utilização, vai ajudar muito. Sucesso!!!