thiagolunardi / MvcMusicStoreDDD

The same MVC MusicStore published by Microsoft, but written with all best practices design and architectural patterns as DDD, SelfValidation, SOLID and tests
MIT License
361 stars 167 forks source link

Obtendo informações de um serviço externo #17

Closed miltoncamara closed 7 years ago

miltoncamara commented 7 years ago

Olá Thiago, mais uma outra dúvida que me surgiu em relação ao projeto em questão.

No meu Domínio eu tenho todas as Entities que retorna as informações do banco de dados, correto?

Agora suponhamos que eu plugue um webservice na camada de Infra no qual irei consumir, porem as informações que retorna do webservice vem muita sujeira, ou seja, eu gostaria de ler somente as informações que eu preciso, neste caso, você acha viável criar uma outra pastinha chamada DataTransfer, onde eu criaria todos os Request's e Response's, pensei em criar essa pasta dentro do Dominio pois é obrigatório ter essas informações para eu salvar em uma base de dados local, ou seja, independente do serviço externo que eu utilizar, eu garanto que as informações que eu retornar será compatível com minha base de dados.!

Muito obrigado!

thiagolunardi commented 7 years ago

Para o Domínio, não importa como ou onde as informações serão persistidas. Seu repositório pode salvar dados em BD, ou em um webservice. Para o Domínio, é indiferente.

Agora, seu domínio não deve conhecer nada do mundo exterior. Nada mesmo.

Nesse caso de vc usar uma API, crise uma class library apenas para consumir essa API. Nela vc terá classes específicas para atenderem os requests e responses. Classes essas que não deverão ser compartilhadas, ou seja, tipo internal.

Às classes públicas dessa CL deverão implementar as interfaces de repositório, por exemplo. Seu métodos terão parâmetros do tipo entidades do seu domínio, e lá dentro vc transforma ou mapeia seu objeto de domínio em um objeto de request. No caso de consultas, vc transforma o conteúdo do objeto de response em um objeto de domínio e faz o retorno.

Obter o Outlook para Androidhttps://aka.ms/ghei36


From: Milton Câmara notifications@github.com Sent: Friday, February 3, 2017 6:34:57 PM To: thiagolunardi/MvcMusicStoreDDD Cc: Subscribed Subject: [thiagolunardi/MvcMusicStoreDDD] Obtendo informações de um serviço externo (#17)

Olá Thiago, mais uma outra dúvida que me surgiu em relação ao projeto em questão.

No meu Domínio eu tenho todas as Entities que retorna as informações do banco de dados, correto?

Agora suponhamos que eu plugue um webservice na camada de Infra no qual irei consumir, porem as informações que retorna do webservice vem muita sujeira, ou seja, eu gostaria de ler somente as informações que eu preciso, neste caso, você acha viável criar uma outra pastinha chamada DataTransfer, onde eu criaria todos os Request's e Response's, pensei em criar essa pasta dentro do Dominio pois é obrigatório ter essas informações para eu salvar em uma base de dados local, ou seja, independente do serviço externo que eu utilizar, eu garanto que as informações que eu retornar será compatível com minha base de dados.!

Muito obrigado!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHubhttps://github.com/thiagolunardi/MvcMusicStoreDDD/issues/17, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AFLVKz5TA7qWjiwTYbC8DVGrVX12Wt3Oks5rY2VBgaJpZM4L2mTF.

BrunoZanholo commented 7 years ago

@thiagolunardi eu costumo criar interfaces de anticorrupção em meu domínio. Estas sim serão implementadas pela CL que você citou. Para trafegar os dados entre o domínio e a CL, crio em meu domínio classes de transporte (ida e volta, conforme a necessidade) que são especificadas nas interfaces de anticorrupção (CL). Importante que estas classes de transporte não são as classes de request e response do WS.

miltoncamara commented 7 years ago

@BrunoZanholo Exatamente essa a dúvida que tenho, ou seja, eu trato meu Webservice como um repositorio tudo especificado em interfaces, porem eu preciso filtrar as informações que vem nesse webservice, ou seja, criando uma Model, seria essa model uma Entity no meu Domain? Um outro detalhe que essa mesma Entity que eu obtenho do Webservice eu preciso salvar na minha base de dados. Eu teria que criar no caso uma Entity que recebe do Webservice e outra que salva na minha base de dados?

thiagolunardi commented 7 years ago

@BrunoZanholo entendi o que vc faz, é como o antigo método de criar classes de DTO (data transfer objecto). Particularmente eu não gosto. Porém, existem técnica similares, e bem mais maduras de fazer isso, hoje são é Command Pattern .

Voce e o @miltomcamara podiam dar uma olhada nessa implementação de Command Pattern. Ele trata de requests e resposta contra o domínio, protejendo as entidades e separando bem responsabilidades.