Microservicios y Domain Driven Design
Rubén Gavilán Fernández Software Architect

Microsserviços e Domain Driven Design (DDD): uma abordagem prática à arquitectura de software

Como já foi referido em inúmeras ocasiões, embora soe um pouco cliché, no mundo em que vivemos, as mudanças ocorrem a uma velocidade cada vez maior, onde as empresas tendem a ter necessidades de mudança que lhes permitem adaptar e moldar o seu negócio à evolução do mercado. Adicionalmente, observamos também que, de dia para dia, surgem novas tecnologias capazes de proporcionar novos benefícios e capacidades e, por isso, ajudam-nos a oferecer maior valor no mercado, diferenciando-nos dos nossos concorrentes.

No cenário acelerado e estimulante em que o desenvolvimento de software se tornou, a criação de sistemas escaláveis, flexíveis e de fácil manutenção representa um desafio para muitas organizações. Neste sentido, duas abordagens surgiram como pilares fundamentais para a construção de sistemas complexos: o Domain Driven Design (DDD) e os Microsserviços. A aliança das duas é uma combinação poderosa que permite a criação de sistemas altamente escaláveis, flexíveis e de fácil manutenção, alinhados com as necessidades de negócio que estão em constante mudança.

Dois pilares fundamentais para a construção de sistemas complexos: Domain Driven Design (DDD) e Microservices

Os microsserviços oferecem uma série de vantagens importantes. Ao contrário de uma arquitetura monolítica, em que um único componente está disponível para todo o sistema, este é dividido em pequenos serviços que funcionam de forma independente, mas que trabalham em conjunto para cobrir toda a funcionalidade. Como os microsserviços são autónomos, cada um pode ser atualizado, implementado e escalado sem afetar os outros, dando à aplicação uma elevada capacidade de evolução à medida que surgem necessidades técnicas ou de negócio. Os microsserviços também permitem que as equipas de desenvolvimento trabalhem de forma autónoma, o que acelera o desenvolvimento e a entrega contínua.

O DDD baseia-se na ideia de que o coração de qualquer sistema de software é o domínio do negócio, centrando-se na sua compreensão e modelação de forma profunda, promovendo a utilização de uma linguagem ubíqua partilhada entre os especialistas do domínio e as equipas de desenvolvimento, o que permite um profundo conhecimento e compreensão dos processos de negócio. Esta metodologia de design do domínio, em que é protegida a lógica do domínio do negócio complexo e menos mutável, ajuda a abstrair a complexidade dos casos de utilização, permitindo a evolução e a mudança controlada do software. Esta perspetiva baseada no isolamento do domínio enquadra-se perfeitamente na filosofia do padrão de design Ports and Adapters, também conhecido como arquitetura hexagonal.

O enfoque nos limites do contexto, outra caraterística fundamental do DDD, leva à modularização do sistema em componentes mais pequenos e coesos, o que não só melhora a facilidade de manutenção, como também fornece uma base concetual sólida para futuras implementações de arquiteturas baseadas em microsserviços.

Para refletir a forma como o Domain Driven Design e os microsserviços podem ser eficazmente interligados, consideremos o caso de uma aplicação muito simples em que temos de gerir clientes e pedidos. Além disso, os clientes têm endereços associados e os pedidos de um cliente são compostos por produtos.

​​​​​​Neste caso, podemos ver que, por um lado, temos a gestão dos próprios pedidos e, por outro lado, temos também a gestão dos clientes, formando ambos os blocos contextos delimitados dentro do mesmo domínio.

​​​​​​Esta divisão em diferentes contextos fornece uma base muito boa para proceder à decomposição do que poderia inicialmente ser visto como uma unidade em serviços mais pequenos que são mais fáceis de manter e escalar, resultando em microsserviços de clientes e pedidos.

​​​​​​Em conclusão, ao aplicar os princípios do DDD ao design de microsserviços, as organizações podem aproveitar os benefícios de ambas as metodologias e construir sistemas altamente adaptáveis e flexíveis. Na Izertis ajudamos as organizações a combinar estas abordagens com todas as peças necessárias para encontrar a solução que melhor se adapta às suas necessidades de negócio.