1
resposta

Qual o local recomendado para colocar regras de validação?

Olá, tenho uma dúvida está até pouco fora do contexto do projeto do curso, mas creio que se puderem responder posso fixar ainda mais o conteúdo.

Imagine que no use case de matricular aluno (/src/Academico/Aplicacao/Aluno/MatricularAluno) houvesse uma regra do tipo:

  • Verificar se aluno possui os pré-requisitos do curso para se matricular ou se ele já está matriculado no curso.

Isso ficaria na camada de aplicação?

class MatricularAluno
{
    private RepositorioDeAluno $repositorioDeAluno;
    private PublicadorDeEvento $publicador;

    public function __construct(RepositorioDeAluno $repositorioDeAluno, PublicadorDeEvento $publicador)
    {
        $this->repositorioDeAluno = $repositorioDeAluno;
        $this->publicador = $publicador;
    }

    public function executa(MatricularAlunoDto $dados): void
    {
        $aluno = Aluno::comCpfNomeEEmail($dados->cpfAluno, $dados->nomeAluno, $dados->emailAluno);

       /*******************************************************************
    #  Seria aqui o local recomendado para fazer uma validação ?
        # Eu "precisava" validar se aluno atende aos pré-requisitos
        # para matricular no curso. 
       *******************************************************************/

        $this->repositorioDeAluno->adicionar($aluno);

        $evento = new AlunoMatriculado($aluno->cpf());
        $this->publicador->publicar($evento);
    }
}

Se puderem me ajudar eu agradeço, forte abraço.

1 resposta

Sim, Silas. Nesse ponto você chamaria os métodos de domínio corretos.

Mas os ifs ficariam na camada de domínio. Um exemplo:

$aluno->atendePreRequisitos($parametrosNecessarios)

Ou algo do tipo.

Se uma regra de negócio não fizer muito sentido dentro de nenhuma entidade (se seu aluno acabar se acoplando demais) você pode criar um Domain Service para executar essa lógica. :-)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software