Oi Reinaldo! Como vai?
A ideia por trás dos Domain Services é realmente encapsular lógicas de negócio que não pertencem a uma entidade ou objeto de valor específico. No entanto, a implementação de um Domain Service pode, sim, envolver a infraestrutura, especialmente quando se trata de ações que requerem interação com sistemas externos, como o envio de e-mails.
No exemplo que você mencionou, o EnviarCupomDesconto
é uma interface que define a operação de enviar um cupom, mas a implementação real dessa operação pode depender de serviços de infraestrutura, como um serviço de e-mail. A interface em si faz parte do domínio, pois define uma operação de negócio, mas a implementação concreta, que pode envolver detalhes técnicos de como o e-mail é enviado, reside na infraestrutura.
Por exemplo, a interface EnviarCupomDesconto
pode ser implementada por uma classe EnviarCupomDescontoViaEmail
, que utiliza um serviço de e-mail para enviar o cupom. Essa classe de implementação estaria na camada de infraestrutura, enquanto a interface permanece no domínio.
Espero que isso ajude a esclarecer a diferença entre a definição do serviço de domínio e sua implementação.
Bons estudos!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!