2
respostas

HTTP REST e Kafka com DDD

Olá, boa tarde.

Estou estudando DDD agora e deu a impressão que DDD é para aplicações monolíticas. Com microserviços a delimitação entre os contextos são tão grande que precisamos realmente duplicar código (na verdade recriar) para poder usar determinadas entidades. P.ex, aqui temos uma UserProfile, mas se o seu microserviço usa apenas alguns atributos, muito provavelmente o evento só vai ter esses atributos e você vai criar uma UserProfile pra poder fazer o mapeamento de json pra objeto, mas essa UserProfile não é a mesma que outras UserProfiles em outros MS. Vc pode chamar de outro nome se quiser. O ponto é que não há necessidade de organizar, a delimitação é imposta, ou, melhor dizendo, opaca: não dá pra ver nada que tá do outro lado.

Qual o papel do DDD em uma arquitetura baseada em MS? Que nome se dá pra essa arquitetura?

Me parece que é algo mais relacionados com algum tipo de abordagem 'orientada a componentes', tipo no antigo delphi e talz... A noção de shared não existe, pois cada componente atua como uma função que recebe um dado e retorna um dado, geralmente em forma de json. São serviços apenas.

2 respostas

Ola Williams.

Quando se fala em microservices, o design do nosso codigo passa a ser de uma aplicação distribuida. Usando DDD ou não, o caso que você comentou vai acabar acontecendo de toda forma.

Quando um microservice usa outro, pode ser necessário tratar retornos para o seu contexto de negócio, daquele microservice. Sistemas distribuídos usam muito DTO para trafegar esses dados para as camadas adjacentes do projeto. Um design legal é separar os acessos entre microservices em uma camada "adapter" do projeto e tratar ali o necessário para a requisição, resposta e filtro dos dados que precisamos.

Olá. Primeiramente, gostaria de esclarecer que a noção de "shared", ou seja, um núcleo compartilhado, existe sim entre microsserviços, mas não é recomendado, ou melhor, deve ser evitada quando possível (justamente por compartilhar um código que deverá ser mantido por uma ou mais equipes, que precisa de um alto esforço de comunicação entre as equipes para ser mudado/evoluído, ou seja, cria-se um acoplamento entre os contextos delimitados). O compartilhamento desse código pode ser através de bibliotecas ou pacotes distribuídos entre as diferentes equipes/contextos delimitados que façam uso do mesmo. Agora, respondendo a sua pergunta:

Qual o papel do DDD em uma arquitetura baseada em MS? Que nome se dá pra essa arquitetura?

O papel do DDD será o mesmo em uma arquitetura baseada em microsserviços quanto em uma arquitetura monolítica. O DDD não é prescritivo e possuí um arcabouço de ferramentas e técnicas que vão ajudar na concepção de soluções (padrões estratégicos, padrões táticos, linguagem onipresente, ferramentas e técnicas para a análise e projeto de modelos de domínio), sejam elas baseadas em microsserviço ou não.

Na minha opinião, o maior ganho que o DDD traz quando empregado em um projeto de software baseado na arquitetura de microsserviços é no momento da análise do domínio, ou seja, na decomposição do domínio em subdomínios, sua caracterização estratégica, definição da linguagem onipresente e da fronteira da aplicabilidade do modelo (que seria a concepção dos contextos delimitados).

As técnicas que o DDD emprega para a análise do domínio (principalmente a assimilação do conhecimento) e decomposição do domínio, permite a identificação dos subdomínios e subsequentemente, contextos delimitados, com uma granularidade adequada para ser mapeada para microsserviços, por isso, nesses últimos anos, houve essa ascensão do uso do DDD.

Edit:

Respondendo a sua segunda pergunta: "Que nome se dá pra essa arquitetura?"

O nome é Arquitetura de Microsserviços, o fato de você usar ou não o DDD não caracteriza/ou descaracteriza a sua arquitetura como de microsserviços. A Arquitetura de Microsserviços é um tipo de arquitetura orientada a serviços, sendo assim, um tipo de sistema distribuído com algumas características próprias que a definem como de microsserviço (existe uma discussão do SOA (Arquitetura Orientada a Serviços) vs Microsserviço, mas aqui, estou considerando a Arq. de Microsserviços como um tipo de Arquitetura Orientada a Serviços).

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