Uma breve introdução ao DDD \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 15 Horas 

 46 Min 

 45 Seg 

   Tempo restante da oferta: 15 46 45 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Uma breve introdução ao DDD  [ Arquitetura de Software ](https://www.treinaweb.com.br/blog/categoria/arquitetura-de-software) 

# Uma breve introdução ao DDD

 Confira neste artigo uma breve introdução ao DDD: o que é domínio, linguagem úbiqua e bounded contexts.

 [ Marylene Guedes ](https://www.treinaweb.com.br/blog/autor/marylene-guedes) 4 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/09/DOMAIN-DRIVEN-DESIGN.png)  

**DDD** é um acrônimo para *Domain Driven Design*. Não se trata diretamente de uma arquitetura ou uma tecnologia; mas sim uma filosofia que prega o desenvolvimento de software de maneira alinhada aos aspectos de negócio com foco na entrega de valor.

No DDD, toda a arquitetura desenhada e até mesmo os termos utilizados nas documentações e no código devem ter relação direta com os componentes de negócio, ou seja, o domínio do software.

Embora as ideias iniciais sobre desenvolvimento orientado aos domínios de negócio não sejam necessariamente novos, o conceito do DDD foi apresentado de maneira estruturada em 2005 por Eric Evans, através do livro **Domain Driven Design: tackling complexity in the heart of software.**

[  ![Desenvolvedor React](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/react.svg)   Formação Desenvolvedor React Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-react)

### Componente central do DDD: o que é domínio?

O domínio é basicamente o problema do ponto de vista de negócio a ser resolvido, pois o domínio justifica a existência do software.

Por exemplo, podemos imaginar uma situação em que uma empresa de venda de planos de saúde precisa de um software para auxiliar no processo de gestão de seus processos e informações.

Para algumas organizações, é difícil gerenciar os fluxos de gestão de pessoas, marketing, fiscal e contábil somente por planilhas, sendo assim necessário um software para prover mais automação e controle destes processos.

Este então seria o *domínio* de uma aplicação a ser desenvolvida para auxiliar neste processo de gerenciamento: automação e controle de fluxos de várias áreas da empresa. Este é o problema a ser resolvido pelo software em questão.

Domínios podem ser complexos para serem resolvidos sob um único ponto de vista. Nestes casos, o domínio pode ser ainda quebrado em subdomínios com o intuito de facilitar o processo de exploração e design da aplicação.

No nosso exemplo, o domínio, *automação e controle de fluxos de várias áreas da empresa* é extenso, pois uma organização possui várias subáreas. Assim, dessa maneira, poderíamos derivar alguns subdomínios a partir deste domínio, como Marketing, Recursos Humanos e Financeiro, por exemplo.

![Exemplo de subdomínios](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/09/exemplo-subdominios.jpg)

### Linguagem ubíqua e bounded contexts

Devido ao fato de o DDD ser totalmente voltado ao negócio, não existe espaço para a utilização de termos ambíguos para a definição das estruturas de software e nas conversas entre os *domain experts* (os quais são as pessoas que dominam o negócio e provavelmente irão utilizar o software) e os times de tecnologia.

Todos os times envolvidos no projeto devem utilizar os mesmos termos e nomes para se referenciarem aos componentes de negócio do projeto.

Por exemplo: não deveríamos ter parte do time chamando o contexto de Recursos Humanos de *RH* e outra parte chamando de *People*. Termos diferentes atrapalham o alinhamento entre os domain experts e os times de tecnologia, pois a visão de negócio deve ser unificada na organização.

É necessária uma coleção de termos altamente acoplados com os aspectos de negócio, termos estes padronizados e que devem ser utilizados por todos os componentes do projeto.

Este conjunto de termos unificados e que devem ser utilizados por todos os membros do projeto constitui um dos pilares do DDD, chamado de linguagem ubíqua.

Se parte do time chama o subdomínio Recursos Humanos de RH, enquanto outra parte do time chama de People, é necessário estabelecer um termo ubíquo para fazer referência a este subdomínio, termo este que deve passar a ser utilizado por todos os membros do projeto.

A escolha deste termo ubíquo deve ser feita de maneira mais alinhada possível com o negócio, mostrando a importância dos domain experts no processo de utilização do DDD.

Porém, existem situações em que até mesmo a linguagem ubíqua pode sofrer variações dentro do mesmo domínio e subdomínio.

Por exemplo: se considerarmos o subdomínio de Marketing da situação anterior, podemos ter os clientes representados antes de comprarem um plano de saúde, mas também podemos ter mesmos clientes após comprarem um plano e se tornarem de fato clientes.

Em termos de negócio, os potenciais clientes que podem adquirir o plano de saúde são chamados de leads, enquanto os clientes que compram os planos de saúde (ou seja, os antigos leads) passam a ser chamados de clientes efetivamente. Porém, tudo isso acontece dentro do mesmo subdomínio de Marketing.

Na situação anterior, podemos perceber que até mesmo a linguagem ubíqua pode encontrar fronteiras dentro de um mesmo domínio e/ou subdomínio. As fronteiras que acabam por serem definidas em decorrência da linguagem ubíqua são chamadas de bounded contexts dentro do DDD.

![Exemplo de bounded context](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/09/bounded-context.jpg)

Utilizar o DDD para visualizar o domínio, os subdomínios e os bounded contexts pode ajudar no processo de design da arquitetura do projeto, já que estes conceitos já apresentam divisões lógicas de maneira totalmente alinhada com o negócio.

Geralmente, subdomínios e bounded contexts acabam por se tornar serviços e microserviços dentro da arquitetura proposta para a resolução do domínio.

Porém, a vantagem é a entrega de valor ao negócio, pois até mesmo o design da solução refletirá de maneira fiel o negócio a ser atacado pelo projeto de software.

Visualizar subdomínios e bounded contexts, bem como os fluxos de interação entre estas estruturas, pode ser uma tarefa muito árdua, especialmente quando tratamos de domínios muito extensos e complexos.

Por isso, existem técnicas que conciliam os times de produto, tecnologia e os domain experts para a definição destas estruturas em conjunto.

Uma das técnicas mais famosas que podem ser utilizadas para essa missão é o Event Storming. Porém, este assunto fica para um próximo artigo :)

- [ #Domínio ](https://www.treinaweb.com.br/blog/tag/dominio)
- [ #linguagem ](https://www.treinaweb.com.br/blog/tag/linguagem)
- [ #DDD ](https://www.treinaweb.com.br/blog/tag/ddd)
- [ #bounded context ](https://www.treinaweb.com.br/blog/tag/bounded-context)
- [ #ubíqua ](https://www.treinaweb.com.br/blog/tag/ubiqua)

Autor

 ![Marylene Guedes](//secure.gravatar.com/avatar/5b0ba52b3705f298802db58782656bbc?d=mm)

## Marylene Guedes

 Responsável pelo sucesso do cliente na TreinaWeb. Graduada em Gestão de Tecnologia da Informação pela FATEC Guaratinguetá, além de estudante de UX/UI. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/marylene-guedes)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/functional-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Imutabilidade de objetos no PHP ](https://www.treinaweb.com.br/blog/imutabilidade-de-objetos-no-php) 

     Imutabilidade é uma característica forte nas linguagens funcionais, onde a alteração de estado não é frequente e, quando ela acontece, é controlada. Veja como podemos ter objetos imutáveis no PHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/ASCII-UNICODE-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ Uma introdução a ASCII e Unicode ](https://www.treinaweb.com.br/blog/uma-introducao-a-ascii-e-unicode) 

     Veja um pouco mais sobre os sistemas de codificação de caracteres ASCII e Unicode.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/11140050/sockets-redes-tcp-udp-400x280.png)  [ Rede de computadores ](https://www.treinaweb.com.br/blog/categoria/rede-de-computadores) 

     8 anos atrás

    ##  [ Uma introdução a TCP, UDP e Sockets ](https://www.treinaweb.com.br/blog/uma-introducao-a-tcp-udp-e-sockets) 

     Uma introdução (base teórica) para TCP, UDP e Sockets, principalmente para desenvolvedores que desejam programar com Sockets.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/11/12132017/introducao-swoole-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Introdução ao Swoole, framework PHP assíncrono baseado em corrotinas ](https://www.treinaweb.com.br/blog/introducao-ao-swoole-framework-php-assincrono-baseado-em-corrotinas) 

     Uma Introdução ao Swoole, framework PHP assíncrono baseado em corrotinas e comparação dele com o modelo tradicional que usa um servidor web (nginx, apache etc) com PHP-FPM.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/01125223/react-php-imagem-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Introdução à programação assíncrona em PHP usando o ReactPHP ](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp) 

     Uma introdução à programação assíncrona com PHP e uso básico dos componentes do ReactPHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/leis-usabilidade-400x280.jpg)  [ Acessibilidade e User Experience (UX) ](https://www.treinaweb.com.br/blog/categoria/acessibilidade-e-user-experience-ux) 

     10 anos atrás

    ##  [ Três leis para melhorar a usabilidade da sua aplicação ](https://www.treinaweb.com.br/blog/tres-leis-para-melhorar-a-usabilidade-da-sua-aplicacao) 

     Uma breve introdução e alguns exemplos de como as leis abordadas neste post podem ser aplicadas para melhorar a usabilidade do seu produto/serviço.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/12/npm-voce-sabe-o-que-da-para-fazer-com-ele-400x280.png)  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

     3 anos atrás

    ##  [ Introdução ao gerenciamento de projetos Node.js com npm ](https://www.treinaweb.com.br/blog/introducao-ao-gerenciamento-de-projetos-node-js-com-npm) 

     Neste artigo sobre Introdução ao gerenciamento de projetos Node.js vamos aprender os principais comandos utilizados no npm.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/02/12200152/serverless-400x280.png)  [ Computação em nuvem ](https://www.treinaweb.com.br/blog/categoria/computacao-em-nuvem) 

     8 anos atrás

    ##  [ Serverless: uma introdução ](https://www.treinaweb.com.br/blog/serverless-uma-introducao) 

     Nesse artigo uma introdução à arquitetura Serverless e um pouco sobre o AWS Lambda, um dos principais serviços do mercado.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/GUIA-INTRODUÇÃO-PROGRAMAÇÃO-400x280.png)  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

     6 anos atrás

    ##  [ Guia de introdução à programação ](https://www.treinaweb.com.br/blog/guia-de-introducao-a-programacao) 

     Entenda os conceitos fundamentais para iniciar seus estudos na área de desenvolvimento neste guia de introdução a programação.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/11/07161636/introducao-a-aws-400x280.png)  [ Amazon ](https://www.treinaweb.com.br/blog/categoria/amazon) 

     8 anos atrás

    ##  [ Introdução à Amazon Web Services (AWS) ](https://www.treinaweb.com.br/blog/introducao-a-amazon-web-services-aws) 

     A Amazon Web Services (AWS) é uma das principais plataformas de computação em nuvem do mercado. Aprenda os principais conceitos e veja como criar sua conta de teste.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/04/08160716/capa-currying-400x280.jpg)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     8 anos atrás

    ##  [ Conceitos de linguagens funcionais: uma breve introdução aos monads ](https://www.treinaweb.com.br/blog/conceitos-de-linguagens-funcionais-uma-breve-introducao-aos-monads) 

     Neste post, dando continuidade à série sobre programação funcional, trataremos de um tema muito pertinente: os monads e suas definições essenciais.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/24120107/streams-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Streams no PHP ](https://www.treinaweb.com.br/blog/streams-no-php) 

     Você, desenvolvedor PHP, já teve a oportunidade de trabalhar mais intimamente com Streams? Se você já teve ou não, esse artigo é pra você! Uma introdução ao essencial sobre o assunto.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **15h 46min 45s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
