Domain-driven design (DDD) não é tema novo (Eric Evans formalizou o conceito há mais de uma década). Entretanto, é curioso como, até hoje, os conceitos básicos sobre o assunto despertam interesse, principalmente em comunidades .NET. Ainda mais curioso é como esses mesmos conceitos são erroneamente interpretados. A fundação de DDD está no conceito de linguagem […]
Command Query Responsibility Segregation (CQRS)
Command Query Responsibility Segregation (CQRS) é uma abordagem para desenvolvimento de software onde desenvolvemos estruturas de dados distintas para gravação (comandos) e para a leitura (consultas). CQRS não prescreve, explicitamente, a adoção de eventos. Entretanto, é comum utilizar, com CQRS, algum padrão de notificação por eventos ou até event sourcing. Greg Young, responsável pelas formalizações […]
Enterprise Integration Patterns (EIP)
Enterprise Integration Patterns, de Gregor Hohpe e Bobby Woolf, é um clássico e leitura obrigatória para todos que desejam implementar integração, usando mensageira, da maneira certa. Lançado em 2003, ainda é uma das melhores referências sobre o tema. Mesmo com exemplos em código já “um pouco cansados”, ainda é atual e absolutamente relevante. Também é […]
Event Sourcing
Fazer com que um sistema lance eventos de notificação para toda modificação no estado de uma entidade abre espaço para algumas soluções interessantes. Podemos, por exemplo, usar os eventos de notificação para, além de permitir implementação desacoplada de consistência eventual entre aplicações, contar a “história” de uma entidade, através de uma técnica conhecida como Event […]
Explicitando os Componentes de um Contêiner usando C4 Model
Já sabemos como explicitar as relações de um sistema com os demais (diagrama de contexto). Também já sabemos como explicitar a macroestrutura de um sistema através de seus contêineres (diagrama de contêineres). Agora, é hora de entendermos um pouco melhor o funcionamento de cada contêiner, utilizando o modelo C4, explicitando seus componentes. Contextualizando, um sistema […]
Explicitando os Contêineres de um Sistema de Software usando o C4 Model
O que mais me agrada no C4 Model é a forma como detalhes vão sendo explicitados na medida em que avançamos na elaboração dos diagramas. Cada nível de diagrama representa um “zoom” nas informações indicadas no nível anterior. Enquanto o diagrama de contexto, apresentado no post anterior, visa ilustrar a relação do sistema que estamos […]
Representando o contexto de um sistema de software com C4 model
No modelo C4, o diagrama de contexto descreve, com um nível de abstração bem elevado, um sistema de software indicando suas responsabilidades, seus principais usuários (humanos ou não) e suas principais dependências Este diagrama é muito útil para reforçar acordos, principalmente com áreas não técnicas, sobre as expectativas, em alto nível, que precisam ser atendidas. […]
O que é e para que serve o C4 Model?
A ausência de padrões leves para externar (seja para documentação ou na elaboração) a arquitetura de um software sempre é um dos maiores desafios que encontro em minhas consultorias. Representações exóticas, pouco expressivas e com significado difícil de determinar são bem comuns. C4 Model tem se apresentado como uma excelente alternativa para resolver esse problema. […]
Event-carried state transfer
O uso de notificações por eventos, que discutimos em um post anterior, permite o desenvolvimento de soluções elegantes para problemas potencialmente complexos. Como fazer com que duas ou mais aplicações (potencialmente serviços ou microsserviços) que utilizam os dados de um determinado tipo de entidade, operem de forma eventualmente consistente, com o mínimo de acoplamento, sem […]
Purely Functional Data Structures
Purely Functional Data Structures, de Chris Okasaki, mostra como implementar estruturas de dados clássicas respeitando o paradigma funcional. Além disso, descreve técnicas de design que “facilitam” a escrita de código nesse paradigma. Todos os exemplos do livro tem versão em Haskell e Standard ML e são fáceis de adaptar para qualquer linguagem com “inclinação funcional”, […]