🧩 Padrões de Design e Domínio
A modelagem da solução é baseada em Domain-Driven Design (DDD) para identificar os Bounded Contexts, aliada à Clean Architecture para isolamento das regras de negócio do framework técnico.
Por que DDD? Utilizamos DDD para garantir que a complexidade do negócio financeiro seja refletida fielmente no código, utilizando uma Linguagem Ubíqua compartilhada entre desenvolvedores e especialistas de negócio.
🎯 Bounded Contexts
Identificamos três contextos principais que delimitam as responsabilidades do sistema:
🔐 Identity & Access
Linguagem: Usuário, Perfil, Permissão, Token.
Focado no ciclo de vida do usuário e integração com Keycloak.
💰 Financial Transaction
Linguagem: Conta, Transação, Débito, Crédito, Saldo.
O core do sistema. Garante transações ACID e integridade financeira.
📊 Analytics & Dashboard
Linguagem: Métrica, Visão, Indicador, Gráfico.
Consolida eventos para fornecer visões rápidas e analíticas.
🏛️ Clean Architecture
Para garantir que o código seja testável e independente de infraestrutura, seguimos rigorosamente as camadas da Clean Architecture.
📜 Regras de Ouro de Implementação
- Domínio Puro: A camada de Domínio não possui dependências de frameworks (JPA, Quarkus, Jackson). Usamos apenas Java Standard (
record,class). - Inversão de Dependência: A aplicação depende de interfaces, e a infraestrutura implementa essas interfaces.
- Independência de Framework: Se decidirmos trocar o Quarkus pelo Spring, a regra de negócio (Core) permanece intacta.
Atenção
Nunca deixe anotações de persistência (@Entity, @Table) vazarem para a camada de Domínio. Utilize Mappers para converter entre a Entidade de Infraestrutura e o Objeto de Domínio.