Categoria

Arquitetura de Software

Event storming: workshop para descoberta de domínio e eventos
Arquitetura de Software

Event storming: workshop para descoberta de domínio e eventos

O Event Storming foi criado por Alberto Brandolini por volta de 2013 como uma técnica colaborativa para explorar domínios complexos. Brandolini percebeu que as reuniões tradicionais de levantamento de requisitos falhavam em capturar a essência do negócio, gerando modelos desconectados da realidade. Inspirado pelos princípios do Domain-Driven Design (DDD) de Eric Evans, o Event Storming propõe um workshop intenso onde especialistas de domínio e desenvolvedores mapeiam juntos o comportamento do si

05/05/2026
Event versioning: evoluindo schemas sem quebrar consumidores
Arquitetura de Software 05/05/2026

Event versioning: evoluindo schemas sem quebrar consumidores

Em sistemas orientados a eventos, produtores e consumidores evoluem em ritmos diferentes. Um produtor pode precisar adicionar campos para atender novos requisitos de negócio, enquanto consumidores podem levar semanas ou meses para serem atualizados. Esse desalinhamento temporal cria um acoplamento frágil: qualquer mudança no schema do evento pode quebrar consumidores que ainda esperam a estrutura antiga.

Evolutionary architecture: adaptando estrutura ao longo do tempo
Arquitetura de Software 05/05/2026

Evolutionary architecture: adaptando estrutura ao longo do tempo

A arquitetura evolutiva (evolutionary architecture) é uma abordagem que reconhece a mudança como constante no desenvolvimento de software. Diferente do modelo tradicional de "big design up front" (BDUF), onde toda a arquitetura é planejada antes da implementação, a arquitetura evolutiva permite que decisões estruturais sejam tomadas incrementalmente, orientadas por feedback contínuo e guiadas por funções de adequação (fitness functions).

Decomposição por domínio vs por capacidade técnica
Arquitetura de Software 05/05/2026

Decomposição por domínio vs por capacidade técnica

Decomposição arquitetural é o processo de dividir um sistema de software em partes menores, gerenciáveis e coesas. Essa divisão determina como os componentes se relacionam, como as equipes trabalham e como o sistema evolui ao longo do tempo. A escolha do critério de decomposição é uma das decisões arquiteturais mais impactantes, pois define a estrutura fundamental do código-fonte, os fluxos de comunicação entre módulos e a facilidade de manutenção.

Deprecation policies: comunicando e gerenciando fim de suporte
Arquitetura de Software 05/05/2026

Deprecation policies: comunicando e gerenciando fim de suporte

Uma política de deprecação é o conjunto de regras, prazos e procedimentos que uma organização adota para comunicar e gerenciar o fim de suporte de um componente de software. Na arquitetura de software, planejar o fim de suporte é tão crítico quanto planejar a introdução de uma nova funcionalidade. Sem uma política clara, consumidores de APIs, bibliotecas ou serviços podem ser pegos de surpresa, gerando incidentes de produção, falhas de segurança ou paradas não planejadas.

Design Patterns: o que são e como surgiram
Arquitetura de Software 05/05/2026

Design Patterns: o que são e como surgiram

Entre os anos 1970 e 1980, a indústria de software enfrentou o que ficou conhecido como "crise do software". Projetos cada vez mais complexos resultavam em código monolítico, difícil de manter, testar e reutilizar. Sistemas eram construídos do zero, sem aproveitamento de soluções anteriores, e a comunicação entre equipes era prejudicada pela falta de uma linguagem comum para descrever problemas recorrentes.

Distributed transactions: 2PC, Sagas e compensação
Arquitetura de Software 05/05/2026

Distributed transactions: 2PC, Sagas e compensação

Em um banco de dados monolítico, uma transação ACID (Atomicidade, Consistência, Isolamento, Durabilidade) garante que múltiplas operações sejam executadas como uma unidade atômica. O banco gerencia locks, logs de undo/redo e isolamento entre transações concorrentes. Em sistemas distribuídos, porém, os dados residem em diferentes serviços, cada um com seu próprio banco de dados. Não há um único gerenciador de transações capaz de coordenar atomicidade entre fronteiras de rede.

Domain-Driven Design: o que é e quando usar
Arquitetura de Software 05/05/2026

Domain-Driven Design: o que é e quando usar

Domain-Driven Design (DDD) é uma abordagem de desenvolvimento de software que coloca o domínio do negócio no centro de todas as decisões arquiteturais. Proposto por Eric Evans em seu livro homônimo de 2003, o DDD propõe que a complexidade essencial de um sistema não está na tecnologia, mas sim nas regras e processos do negócio que ele precisa suportar.

Domain Events: comunicação entre bounded contexts
Arquitetura de Software 05/05/2026

Domain Events: comunicação entre bounded contexts

Domain Events são registros imutáveis de algo relevante que aconteceu no domínio. No contexto do Domain-Driven Design (DDD), eles capturam fatos de negócio que podem interessar a outros componentes do sistema, especialmente bounded contexts vizinhos. Um evento não é uma instrução ("faça algo"), mas uma notificação ("algo aconteceu").

Domain Services e Application Services
Arquitetura de Software 05/05/2026

Domain Services e Application Services

No Domain-Driven Design (DDD), os Services representam um dos blocos fundamentais da camada de domínio, ao lado de Entities e Value Objects. Enquanto Entities encapsulam estado e comportamento, e Value Objects representam conceitos imutáveis com igualdade baseada em atributos, os Services surgem para operações que não pertencem naturalmente a nenhum desses componentes.