arch-bce-pattern
Especialista no padrão arquitetural Boundary-Control-Entity (BCE / ECB de Ivar Jacobson). Define a separação limpa entre interfaces externas (Boundary), lógica de negócio (Control) e entidades de domí
SKILL.mdskills/patterns/arch-bce-pattern/SKILL.md
GitHubBoundary-Control-Entity (BCE) Architecture Pattern
Esta skill define as diretrizes de engenharia e estratégias de modelagem para o padrão Boundary-Control-Entity (BCE / ECB), formulado por Ivar Jacobson para desenvolvimento orientado a casos de uso e componentes de negócio desacoplados.
🏛️ 1. As Três Camadas Canônicas do BCE
[ Cliente Externo / UI ]
│
▼
┌──────────────────┐
│ BOUNDARY │ <-- Entrada, APIs REST/gRPC, Web, Mensageria, Tradução DTO
└─────────┬────────┘
│
▼
┌──────────────────┐
│ CONTROL │ <-- Coordenação do Caso de Uso, Regras de Negócio, Transações
└─────────┬────────┘
│
▼
┌──────────────────┐
│ ENTITY │ <-- Modelo de Domínio, Invariantes, Estado e Persistência
└──────────────────┘
A. Boundary (Fronteira)
- Isola o componente do mundo externo (protocolos de rede, formato JSON, controladores HTTP, filas de mensageria).
- Responsabilidade: validação de entrada estrutural, roteamento de requisição e conversão de DTOs para modelos de domínio.
- Regra: Boundaries conversam apenas com Controls ou com Entities através de DTOs. Nunca chamam Entities diretamente para operações de mutação.
B. Control (Controle / Caso de Uso)
- Orquestra os casos de uso do negócio e a sequência de operações.
- Responsabilidade: regras de fluxo, gerenciamento de transações, políticas de negócio e disparo de eventos de domínio.
- Regra: Controls não sabem de detalhes de transporte (sem anotações HTTP ou servlets); dependem apenas de interfaces e Entities.
C. Entity (Entidade de Negócio)
- Encapsula o estado, a identidade e os invariantes de negócio fundamentais.
- Responsabilidade: cálculo interno de regras atômicas, persistência e consistência de dados.
🔄 2. Procedimento de Migração Incremental (Migrate-to-BCE)
Para refatorar um projeto legado para a arquitetura BCE sem quebras em produção:
- Identificar Componentes de Negócio (Business Components): Agrupar classes por capacidade de domínio em vez de apenas camadas técnicas.
- Extrair Boundaries: Isolar classes
@RestControllerou@Pathmovendo-as para o pacoteboundary. - Desacoplar a Lógica de Serviço em Controls: Mover o fluxo de orquestração de
@Servicemonolíticos para classes de controle atômicas e focadas em cada caso de uso. - Isolar Entities: Manter entidades de persistência no pacote
entity, protegendo seus invariantes.