Quando se trata de microsserviços, os ciclos de vida de desenvolvimento dos serviços também devem ser independentes. *
SLDC diferentes e diferentes equipes de desenvolvimento
em um sistema real de EM, pode haver várias equipes envolvidas no desenvolvimento do ecossistema, cada uma delas encarregada de um ou mais serviços. Por sua vez, essas equipes podem estar localizadas em escritórios, cidades, países, planos ... Talvez eles nem se conheçam, o que dificulta o compartilhamento de conhecimento ou código (se possível). Mas isso pode ser muito conveniente, porque o código compartilhado também implica um tipo de raciocínio de compartilhamento e algo importante a lembrar é que, o que faz sentido para uma equipe específica, não precisa ser para outra equipe. Por exemplo, dado o Cliente do DTO , ele pode ser diferente dependendo do serviço em execução, porque os clientes são interpretados (ou vistos) de maneira diferente de cada serviço.
Necessidades diferentes, tecnologias diferentes
SLDCs isolados também permitem que as equipes escolham a pilha que melhor se adapta às suas necessidades. A imposição de DTOs implementados em uma tecnologia específica limita a capacidade das equipes de escolher.
DTOs não são regras de negócios nem contratos de serviços
O que os DTOs são realmente? Objetos simples com nenhum outro objetivo além de mover dados de um lado para outro. Sacos de caçadores e caçadores. Não é o tipo de "conhecimento" que vale a pena reutilizar, em geral porque não há conhecimento. Sua volatilidade também os torna maus candidatos ao acoplamento.
Ao contrário do que a Dherik declarou, deve ser possível que um serviço altere seus DTOs sem precisar fazer outros serviços para alterar ao mesmo tempo. Os serviços devem ser leitores tolerantes, escritores tolerantes e tolerantes a falhas . Caso contrário, eles causam acoplamentos de forma que a arquitetura de serviço não faz sentido. Mais uma vez, e ao contrário da resposta de Dherik, se três serviços precisarem exatamente dos mesmos DTOs, é provável que algo tenha dado errado durante a decomposição dos serviços.
Negócios diferentes, interpretações diferentes
Embora possa haver (e haverá) conceitos transversais entre os serviços, isso não significa que devemos impor um modelo canônico para forçar todos os serviços a interpretá-los da mesma maneira.
Estudo de caso
Digamos que nossa empresa tenha três departamentos, Atendimento ao Cliente , Vendas e Remessa . Diga a cada um desses lançamentos um ou mais serviços.
O Atendimento ao Cliente, devido ao seu idioma de domínio , implementa serviços em torno do conceito de clientes, onde os clientes são pessoas . Por exemplo, os clientes são modelados como nome , sobrenome , idade , sexo , email , telefone etc.
Agora, digamos, Vendas e Remessa modelam seus serviços de acordo com os respectivos idiomas de domínio. Nesses idiomas, o conceito de cliente também aparece, mas com uma diferença sutil. Para eles, os clientes não são (necessariamente) pessoas . Para vendas , os clientes são um número de documento de um cartão de crédito e um endereço de cobrança , para transporte de um nome completo e endereço de entrega também.
Se forçarmos o Sales and Shipping a adotar o modelo de dados canônicos do Atendimento ao Cliente , os forçaremos a lidar com dados desnecessários que podem acabar introduzindo complexidade desnecessária se eles tiverem que manter toda a representação e manter os dados do cliente sincronizados com o atendimento ao cliente .
Links Relacionados
* Aqui é onde estão os pontos fortes dessa arquitetura
proto
arquivo para gRPC ou oavro
esquema para Kafka e gerar os DTOs nos dois serviços, mas eu não compartilharia uma biblioteca compartilhada entre dois projetos.