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

[Dúvida] Atribuições de camadas

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.

1 resposta
solução!

Oi Aélio!

Sim, a lógica que você descreveu está correta!

No pacote de domínio, você coloca as interfaces que definem as funcionalidades do seu sistema. Já no pacote de infra, você implementa essas interfaces, utilizando a tecnologia escolhida, como a lib Java Mail para enviar e-mails, por exemplo. E no pacote de aplicação, você cria as classes que utilizam a implementação da infraestrutura para executar as ações desejadas.

No exemplo que você deu, na funcionalidade de indicação de aluno, você colocou a classe Indicacao e a interface EnviarEmailIndicacao no pacote de domínio. Na infraestrutura, você colocou a classe EnviarEmailIndicacaoComJavaMail, que implementa a interface EnviarEmailIndicacao. E na camada de aplicação, você colocou a classe EnviarEmailParaIndicado, que acessa a classe da infraestrutura EnviarEmailIndicacaoComJavaMail para executar a ação de enviar e-mail.

E sim, para incluir essa estrutura em um sistema, o acesso para executar a ação de enviar e-mail para o indicado seria sempre através da camada de aplicação, utilizando a classe EnviarEmailParaIndicado, que recebe a interface EnviarEmailIndicacao no construtor. Ao instanciar a classe EnviarEmailParaIndicado, você passaria a implementação de envio de e-mail desejada, como por exemplo EnviarEmailIndicacaoComJavaMail.

Então, sim, está tudo certo! Você organizou muito bem a estrutura das camadas.

Bons estudos!