Em projetos baseados em Domain-Driven Design (DDD), nem sempre é possível que todos os sistemas compartilhem a mesma linguagem ubíqua ou modelo de domínio. Quando um sistema precisa interagir com outro cujo modelo é inconsistente, mal estruturado ou simplesmente diferente, corre-se o risco de “contaminar” o domínio interno com conceitos externos inadequados. É nesse cenário que entra a Camada Anticorrupção (ACL – Anti-Corruption Layer).
Essa camada funciona como uma barreira de proteção, impedindo que estruturas e terminologias externas interfiram negativamente no modelo de domínio principal.
| Função | Descrição |
| Isolamento do Domínio | Garante que o modelo interno do domínio não seja diretamente influenciado por modelos externos. |
| Tradução de Modelos | Atua como um tradutor, convertendo conceitos externos em equivalentes adequados ao modelo interno. |
| Uso de Adaptadores | Utiliza facades, adaptadores, mappers e outros padrões para encapsular interações. |
| Redução de Acoplamento | Permite que os modelos evoluam independentemente, aumentando a flexibilidade e a manutenibilidade. |
Principais funções:
| Função | Descrição |
| Isolamento do Domínio | Garante que o modelo interno do domínio não seja diretamente influenciado por modelos externos. |
| Tradução de Modelos | Atua como um tradutor, convertendo conceitos externos em equivalentes adequados ao modelo interno. |
| Uso de Adaptadores | Utiliza facades, adaptadores, mappers e outros padrões para encapsular interações. |
| Redução de Acoplamento | Permite que os modelos evoluam independentemente, aumentando a flexibilidade e a manutenibilidade. |
Quando aplicar?
- Integração com sistemas legados
- Comunicação entre bounded contexts com modelos distintos
- Situações em que não se quer adaptar ou acoplar o domínio interno a padrões externos inconsistentes
Padrões comuns usados na ACL
- Adapter: transforma a interface de um componente externo para algo compreensível pelo seu domínio
- Facade: oculta complexidades do sistema externo com uma interface mais limpa
- Mapper: converte dados entre dois modelos distintos
Domain Specific Language (DSL) no DDD
No contexto do Domain-Driven Design (DDD), um dos conceitos que mais contribuem para a clareza e precisão na construção de softwares orientados ao negócio é o de Domain Specific Language (DSL) – ou, em português, Linguagem Específica de Domínio.
A DSL é uma linguagem criada sob medida para um domínio específico de aplicação. Seu objetivo principal é aproximar o código da linguagem usada no dia a dia dos especialistas de negócio, como analistas, clientes, gestores ou consultores. Em vez de forçar os desenvolvedores a traduzirem regras complexas de forma genérica e propensa a erros, a DSL permite que essas regras sejam descritas de forma clara, objetiva e diretamente vinculada à realidade do negócio.
Características essenciais da DSL
- Foco no Domínio
A DSL é desenhada para representar conceitos e operações que fazem sentido dentro do domínio em que o software será aplicado. Isso significa que ela utiliza termos e expressões familiares para os especialistas, fazendo com que o código seja mais natural e fácil de compreender. Em outras palavras, o desenvolvedor passa a “falar a língua do negócio” no código. - Comunicação Eficaz
Um dos maiores ganhos da DSL é que ela facilita a comunicação entre o time técnico e o time de negócio. Como todos usam os mesmos termos e estruturas, o risco de interpretações erradas cai drasticamente. Essa comunicação mais direta evita retrabalho, mal-entendidos e acelera a validação de funcionalidades. - Expressividade
A DSL oferece uma forma concisa e direta de descrever a lógica do negócio. Em vez de usar estruturas genéricas e complexas das linguagens tradicionais de programação, que muitas vezes mascaram a real intenção da regra implementada, a DSL captura a essência do comportamento desejado com clareza. Isso torna o código não só mais fácil de manter, como também mais transparente. - Abstração Técnica
Outro aspecto fundamental da DSL é que ela oculta os detalhes técnicos desnecessários. O foco da linguagem está na regra de negócio em si, e não nos aspectos técnicos da sua implementação. Isso reduz distrações no código, mantendo a atenção no que realmente importa: o funcionamento do domínio.
Tipos de DSL
DSL Interna:
É criada dentro de uma linguagem de programação existente, reutilizando sua sintaxe e estruturas. Torna o código mais expressivo no próprio ambiente da linguagem.
DSL Externa:
É uma linguagem separada, com sintaxe própria, desenvolvida exclusivamente para um domínio específico. Precisa de um interpretador ou compilador.
uma Domain Specific Language (DSL) é uma ferramenta estratégica dentro da abordagem de Domain-Driven Design. Seu principal papel é garantir que o software reflita com precisão o conhecimento do domínio.
Ela aproxima os especialistas de negócio dos desenvolvedores, ao criar uma linguagem comum, clara e acessível, que facilita a comunicação, reduz mal-entendidos e explicita as regras de negócio de forma compreensível e executável.
Além disso, uma DSL simplifica a implementação, pois abstrai detalhes técnicos irrelevantes para o negócio, e facilita a manutenção do código, pois as mudanças no domínio podem ser refletidas com mais clareza e menor impacto no sistema.
Assim, ao capturar a essência do domínio em termos que todos compreendem, a DSL se torna um ativo central na criação de sistemas sustentáveis, evolutivos e alinhados ao negócio.
Questões inéditas
1) Em uma arquitetura baseada em DDD, ao se integrar com um sistema legado cuja terminologia e estrutura de dados não condizem com o modelo interno, a prática recomendada para evitar a contaminação do domínio principal é:
A) Adotar o modelo externo diretamente para evitar retrabalho e reduzir o tempo de desenvolvimento.
B) Estender a linguagem ubíqua para abranger os termos dos dois sistemas e adaptar o código gradualmente.
C) Criar uma Camada Anticorrupção (Anti-Corruption Layer), que atua como ponte entre os modelos e isola o domínio interno.
D) Refatorar o sistema legado para se alinhar completamente com o novo modelo de domínio.
E) Utilizar padrões de herança para que o domínio interno herde características dos modelos externos sem perdas.
Comentário:
A Camada Anticorrupção (ACL) é o padrão ideal para cenários em que há necessidade de isolar o modelo interno das inconsistências ou diferenças semânticas dos sistemas externos. Ela traduz e adapta dados e comandos, evitando a contaminação e preservando a integridade do design interno.
Gabarito está CORRETO.
2) No contexto do Domain-Driven Design (DDD), a utilização de uma Domain Specific Language (DSL) tem como principal finalidade:
A) Garantir que o código seja otimizado para performance e uso de recursos computacionais.
B) Estabelecer uma linguagem técnica comum entre os desenvolvedores, sem a participação dos especialistas de domínio.
C) Permitir que os testes automatizados sejam escritos exclusivamente em linguagens de programação compiladas.
D) Facilitar a comunicação entre especialistas de domínio e desenvolvedores, representando com precisão as regras e processos do negócio.
E) Substituir completamente o uso de linguagens de programação genéricas por linguagens específicas do domínio.
Comentário:
A alternativa D está correta. A principal função de uma Domain Specific Language (DSL) no DDD é aproximar o vocabulário técnico do vocabulário do negócio, de forma que desenvolvedores e especialistas de domínio se comuniquem com clareza e precisão. Isso garante que o software seja fiel às regras de negócio, reduzindo ambiguidades, retrabalho e erros de interpretação.
- A alternativa A está errada porque performance não é o foco principal da DSL, mas sim clareza e alinhamento com o domínio.
- A alternativa B contradiz o conceito de linguagem ubíqua, que pressupõe a colaboração com os especialistas de negócio.
- A C mistura conceitos irrelevantes ao foco da DSL, como o uso exclusivo de linguagens compiladas.
- A E está incorreta, pois DSLs complementam as linguagens de programação genéricas, mas não as substituem totalmente.
Gabarito é a letra D.
3) Ano: 2026 | Banca: FCC (Inédita)
Uma instituição financeira está migrando parte de seus sistemas para uma arquitetura baseada em Domain-Driven Design (DDD). Durante a integração com um sistema legado, verificou-se que o modelo de dados e a terminologia utilizados pelo sistema antigo são bastante diferentes do novo modelo de domínio. Para evitar que conceitos do sistema legado afetem o modelo interno da aplicação, decidiu-se utilizar uma Camada Anticorrupção (Anti-Corruption Layer – ACL).
Assinale a alternativa que descreve corretamente a finalidade dessa camada.
A) Garantir que o modelo interno seja substituído gradualmente pelo modelo do sistema legado.
B) Traduzir e adaptar os modelos externos para proteger o domínio interno, reduzindo o acoplamento entre os sistemas.
C) Compartilhar diretamente entidades e objetos de valor entre todos os Bounded Contexts da organização.
D) Eliminar a necessidade de integração entre sistemas distintos por meio da centralização das regras de negócio.
E) Substituir os Repositories do domínio por adaptadores responsáveis pela persistência dos dados.
Comentário
A Camada Anticorrupção (ACL) protege o modelo de domínio interno contra inconsistências de sistemas externos. Ela atua como um tradutor entre modelos distintos, utilizando padrões como Adapter, Facade e Mapper para reduzir o acoplamento e preservar a integridade do domínio.
A) Errada. A ACL não substitui o modelo interno pelo externo.
B) Correta. Essa é exatamente a finalidade da Camada Anticorrupção.
C) Errada. O DDD evita o compartilhamento direto de modelos entre contextos distintos.
D) Errada. A ACL facilita a integração, mas não elimina sua necessidade.
E) Errada. Repositories continuam responsáveis pela persistência; a ACL atua na integração entre modelos.
Gabarito: Letra B.
4) No contexto do Domain-Driven Design (DDD), uma equipe decidiu criar uma linguagem capaz de representar regras de concessão de crédito utilizando termos compreendidos tanto pelos desenvolvedores quanto pelos especialistas de negócio. Essa linguagem descreve conceitos como “aprovar proposta”, “analisar risco” e “limite de crédito”, abstraindo detalhes técnicos da implementação.
Essa abordagem caracteriza o uso de uma Domain Specific Language (DSL). Sobre esse conceito, assinale a alternativa correta.
A) A DSL é uma linguagem de programação de propósito geral utilizada para substituir linguagens como Java e C#.
B) A DSL possui como principal objetivo otimizar consultas SQL realizadas pelo domínio da aplicação.
C) A DSL aproxima especialistas de negócio e desenvolvedores por meio de uma linguagem específica para representar conceitos do domínio.
D) A DSL deve obrigatoriamente ser uma linguagem externa, com compilador próprio e sintaxe independente.
E) A DSL substitui a Linguagem Ubíqua, tornando desnecessária sua utilização no Domain-Driven Design.
Comentário
A Domain Specific Language (DSL) é uma linguagem criada especificamente para representar conceitos de um domínio de negócio. Seu principal objetivo é tornar as regras do domínio mais expressivas, aproximando desenvolvedores e especialistas de negócio por meio de uma linguagem comum.
A) Errada. A DSL não substitui linguagens de propósito geral.
B) Errada. Seu objetivo não é otimizar SQL, mas representar regras do domínio.
C) Correta. Essa é a principal finalidade da DSL no DDD.
D) Errada. A DSL pode ser interna ou externa.
E) Errada. A DSL complementa a Linguagem Ubíqua, não a substitui.
Gabarito: Letra C.
![[PLANTÃO DE EDITAIS] 2° lote – Cabeçalho](https://blog-static.infra.grancursosonline.com.br/wp-content/uploads/2026/08/17101712/plantao-editais-lote2-cabecalho.webp)
![[PLANTÃO DE EDITAIS] 2° lote – Post](https://blog-static.infra.grancursosonline.com.br/wp-content/uploads/2026/08/17102051/plantao-editais-lote2-post.webp)


