Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

DDD + Arquitetura Hexagonal: A Dupla que Desacopla

DDD + Arquitetura Hexagonal: A Dupla que Desacopla

Evento: PHP Conference Brasil 2025
Nessa palestra vou te mostrar como o DDD e a Arquitetura Hexagonal são o casamento perfeito.
Vem comigo!!

Avatar for Igor Duarte

Igor Duarte

December 05, 2025
Tweet

More Decks by Igor Duarte

Other Decks in Technology

Transcript

  1. • Engenheiro de Software • Fundador • Coordenador da Comunidade

    • Palestrante e Escritor • Gamer nas horas vagas Igor Duarte
  2. Um pouco de Conceitos ➔ Arquitetura de Software ➔ Design

    de Software ➔ Arquitetura x Design • Arquitetura define a forma do sistema. • Design define os detalhes do código.
  3. Um pouco de Conceitos ➔ Arquitetura de Software ➔ Design

    de Software ➔ Arquitetura x Design • Arquitetura define a forma do sistema. Hexagonal • Design define os detalhes do código. DDD
  4. DDD em uma frase?! “DDD é uma abordagem de desenvolvimento

    de software que coloca o domínio do negócio no centro, usando Linguagem Ubíqua.”
  5. Arquitetura Hexagonal em uma frase?! “Arquitetura Hexagonal é um estilo

    de organização de software que mantém o núcleo da aplicação isolado de detalhes técnicos”
  6. Linguagem Ubíqua “É a prática de construir uma linguagem comum

    e rigorosa entre desenvolvedores e usuários.” — Martin Fowler
  7. Linguagem Ubíqua Contexto Jurídico ➔ Processo = processo judicial poderia

    ser entendido como algum fluxo ➔ Cliente = parte representada no processo poderia ser confundido como usuário do sistema ➔ Prazo = prazo processual do processo poderia ser qualquer prazo genérico ➔ Petição = documento formal enviado ao tribunal poderia ser um “file” ou qualquer arquivo .pdf ➔ Registro = número da OAB (registro dos advogados) poderia ser qualquer tipo de dado ou documento
  8. Linguagem Ubíqua Contexto Jurídico / Traduções ➔ Processo = legal

    case ➔ Cliente = client ➔ Prazo = final due date ➔ Petição = petition ➔ Registro = lawyer registration lawyer = advogado*
  9. Domínio > É o core do negócio > Problema central

    > Regras de negócio > Onde nasce a linguagem Ubíqua
  10. Bounded Context > Deve representar um modelo conceitual coeso. >

    Deve ter sua linguagem ubíqua própria.
  11. Bounded Context > Deve representar um modelo conceitual coeso. >

    Deve ter sua linguagem ubíqua própria. > Deve resolver um problema específico do domínio.
  12. Bounded Context “Cliente” no financeiro = pessoa que paga boleto.

    “Cliente” no jurídico = parte do processo. Mesma palavra, significados diferentes → contextos diferentes.
  13. Como garantir que o negócio não se perca dentro do

    código? > Linguagem Ubíqua clara
  14. Como garantir que o negócio não se perca dentro do

    código? > Linguagem Ubíqua clara > Bounded Context bem definidos
  15. Como garantir que o negócio não se perca dentro do

    código? > Linguagem Ubíqua clara > Bounded Context bem definidos > Isolando de domínio
  16. ➔ Entidade de Domínio ◆ Linguagem Ubíqua ◆ Representa um

    conceito do domínio ◆ Nada haver com banco de dados ◆ Pode ter algumas regras de negócio Entidades
  17. ➔ Entidade de Domínio Contexto Jurídico LegalCase = Processo caseNumber

    = número do processo protocolDate = data do protocolo client = cliente finalDueDate = Prazo final de vencimento lawyer = advogado district = comarca forum = forum court = vara Entidades
  18. ➔ Entidade Relacional ◆ Vulgo Model ou Entity ◆ Representa

    de tabela no banco ◆ Estrutura pensada no armazenamento de dados ◆ Não possui regras de negócio Entidades
  19. ➔ Entidade Relacional Contexto Jurídico legal_case = Processo case_number =

    número do processo protocol_date = data do protocolo client = cliente final_due_date = Prazo final de vencimento lawyer = advogado district = comarca forum = forum court = vara parent_case = processo filho last_activity = última atividade Entidades
  20. Mappers ➔ Entidade de Domínio x Entidade Relacional LegalCase =

    legal_case caseNumber = case_number protocolDate = protocol_date client = client finalDueDate = final_due_date lawyer = lawyer district = district forum = forum court = court ??? = parent_case ??? = last_activity
  21. ➔ DDD casa com Hexagonal, por conta da divisão de

    módulos x domínio Casamento Perfeito