Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Serviços de Domínio

Fiquei com dúvidas com relação aos serviços de domínio. Esses serviços, como por exemplo o CifradorSenha, seria usado pelas classes de domínio como Aluno?

Se sim a classe Aluno teria que receber essa interface em um dos seus métodos e executá-la?

1 resposta
solução!

Boa tarde Felipe, tudo bem?

Então, seria isso mesmo, ela seria utilizada pelas classes de dominio, ela seria um "serviço", pois ela executa algo para nós que não está diretamente ligada ao dominio.

E em relação a interface, é isso mesmo, você poderia receber direto a implementação do service no construtor do aluno que é CifradorDeSenhaComMD5, porém, de certa forma violariamos um dos principios SOLID(O nome SOLID é um acrônimo dos princípios introduzidos pelo Robert Martin “Uncle Bob”, é um conjunto de boas práticas, ideias e principios para melhorar o design de software, tornando-os mais fáceis de manter, escalar e testar.), e o principio qual violariamos é o D(Dependency inversion - Inversão de depêndencia), que ele diz:

"Módulos de alto nível não devem depender de módulos de baixo nível e ambos devem depender de abstrações", ou seja, nosso modulo de alto nivel que seria Aluno, não conhece quem implementa o CifradorDeSenha, ele só precisa que alguem cifre a senha e compare, fazendo dessa forma, ele dependeria de alguma implementação que poderia ser trocada a qualquer momento.

Temos varias formas de resolver isso, uma bem simples seria no construtor da classe Aluno, receber essa interface e executar o algoritimo na hora de definir a senha, exemplo:

    public Aluno(CPF cpf, String nome, Email email, String senha, CifradorDeSenha cifrador) {
        this.cpf = cpf;
        this.nome = nome;
        this.email = email;
        this.senha = cifrador.cifrarSenha(senha);
    }

Espero que tenha ficado claro, qualquer duvida estou a disposição :)

  1. Curso SOLID
  2. Livro SOLID

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