DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on

Camadas de Validações de um Sistema backend

Introdução

Como você já deve saber, sistemas geralmente têm entrada e saída de dados (Input/Output). Esses dados de entradas são armazenados em alguma base de dados existente. Portanto, esses dados precisam ser controlados e validados para manter a consistência de sua aplicação.

Por exemplo, se temos um campo de CPF (11 dígitos fixos) não podemos deixar o usuário inserir em nossa base de dados um CPF que contém 8 ou 15 dígitos ou que ele consiga criar dois CPFs iguais.

Tipos de validações

No backend existem três níveis principais de validação e é importante entender a diferença entre os conceitos.

  • Validação de Entrada (Camada de API/Controller)
  • Validação de Negócio (Camada de Aplicação /Domain Service)\
  • Validação de Consistência/Infraestrutura

Validação de Entrada (Camadas de API/Controller)

Ocorre logo no início da aplicação (entrada de dados) e o objetivo é garantir que os dados cheguem válidos na camada de aplicação. É nessa camada que será realizado a validação posterior, de negócios. É aqui que o sistema valida a estrutura e o formato, mas nunca a lógica do negócio.

Exemplo: verificar se o CPF tem 11 dígitos, mas não se ele existe no banco.

Validação de Negócio (Camada da Aplicação/Domain Service)

Essa camada é posterior a validação de entrada. Caso todas as informações fornecidas no input da aplicação esteja correta, passamos para a fase da validação de negócio, seu objetivo é garantir que a ação faça sentido pra o sistema.

Exemplos:

  • Não permitir criar um boleto para um cliente bloqueado.
  • Impedir alteração de uma remessa já enviada.
  • Garantir unicidade de um registro lógico (ex: CPF de uma pessoa).

Validação de Consistência/Infraestrutura

Essa é a última etapa de validação e a mais crucial. O objetivo é proteger o sistema e o banco de dados de inconsistências estruturais. Ocorre na camada de repository e banco de dados.

Exemplos:

  • Chaves únicas (UNIQUE, PRIMARY KEY).
  • Relacionamentos (FOREIGN KEY).
  • Restrições de tipo (CHECK, NOT NULL).

Vizualização de fluxo

Cliente
   
Controller
   [ Validação de Entrada ]
   
Application Service
   [ Validação de Negócio ]
   
Domain
   
Repository
   [ Validação de Consistência ]
   
Banco de Dados
Enter fullscreen mode Exit fullscreen mode

Top comments (0)