1
resposta

[Dúvida] Regras de Negócio dentro da Entidade de Domínio

Vejo com uma certa frequencia a utilização de regras de negócio dentro da Entidade principal, normalmente dentro das arquiteturas utilizando DDD. Mas não sei ao certo, por que o correto pode variar de tipos de arquitetura, mas de certa forma o "correto" não deveria ser isolar as regra de negócio e os métodos de modificação da entidade dentro de uma classe de serviço ?

Exemplo prático:

//Metodo que costumo ver
Class Aluno {
   String nome;
   String Idade;
    List<Telefone> telefone;
    
    void addtelefone(Telefone tel){
         //regra de negocio limita numero de telefones
        //codigo incrementar lista		
    }
    
}
//Metodo que imagino ser o ideal
Class AlunoService{

   void addTelefone(){
       //regra de negocio
      // salvar telefone no banco vinculado ao usuario
  }

}
1 resposta

Olá, Leonardo!

Entendo a sua dúvida e é uma questão muito pertinente. No Domain Driven Design (DDD), uma das principais ideias é que as regras de negócio devem estar onde elas fazem mais sentido. No caso do seu exemplo, a regra de negócio está relacionada diretamente com o Aluno, então faz sentido que ela esteja na classe Aluno.

Vamos pensar no seguinte: a regra é que um aluno pode ter no máximo dois telefones. Essa é uma característica do Aluno, e não do serviço que adiciona telefones. Portanto, faz sentido que essa regra esteja na classe Aluno, pois é uma regra intrínseca a ele.

No exemplo que você deu, o método addTelefone na classe AlunoService também é válido, mas ele pode ser mais adequado em casos onde a regra de negócio não está diretamente relacionada a uma entidade específica, ou quando a operação envolve múltiplas entidades.

Por exemplo, suponha que temos uma regra de negócio que diz: "Um aluno só pode ser matriculado em uma disciplina se ele não tiver nenhuma disciplina pendente". Nesse caso, a regra envolve duas entidades diferentes (Aluno e Disciplina), então faz mais sentido colocar essa regra em uma classe de serviço, como MatriculaService, por exemplo.

Para resumir, o local onde você coloca as regras de negócio pode variar dependendo do contexto. No DDD, geralmente colocamos as regras de negócio na entidade a qual elas estão mais diretamente relacionadas. Mas em alguns casos, quando a regra de negócio envolve múltiplas entidades ou não está diretamente relacionada a uma entidade específica, pode fazer mais sentido colocá-la em uma classe de serviço.

Espero ter ajudado e bons estudos!