Rodrigo,
Tudo blz?
Só pra organizar o raciocínio...
Na arquitetura que vc montou (contexto > aplicacao/dominio/infra), numa visão geral, a lógica seria essa abaixo?
No domínio fica a estrutura com suas interfaces. Na infra fica a implementação das interfaces do domínio. Na aplicacao fica a entrada/acesso às funcionalidades do contexto
Por exemplo:
Na funcionalidade de indicação de aluno:
pacote dominio
No pacote escola.academico.dominio.indicacao ficariam Tanto a classe Indicacao quanto a interface EnviarEmailIndicacao
pacote infra
No pacote escola.academico.infra.indicacao ficariam as classes com a tecnologia escolhida para enviar o e-mail, tipo a lib Java Mail.
Nesse caso a classe EnviarEmailIndicacaoComJavaMail que implementa a interface EnviarEmailIndicacao do domínio
pacote aplicacao
Já no pacote escola.academico.aplicacao.indicacao ficaria a classe user case, por exemplo, EnviarEmailParaIndicado, que acessa a classe da infra EnviarEmailIndicacaoComJavaMail, ou qualquer outra, que tem a tecnologia de enviar e-mail para executar a ação.
Para incluirmos essa estrutura em um sistema, o acesso para executar a ação de enviar email para o indicado seria sempre atráves da camada de aplicação, usando a classe EnviarEmailParaIndicado, que recebe a interface EnviarEmailIndicacao no construtor. Nesse caso, ao instanciarmos a classe EnviarEmailParaIndicado passaríamos a implementação de envio de email desejada, tipo EnviarEmailIndicacaoComJavaMail.
Assim mesmo?
Agradeço a atenção.