Design orientado ao domínio (DDD)

Domain-driven design (DDD) é uma filosofia de desenvolvimento de software centrada em torno do domínio, ou esfera de conhecimento, daqueles que o utilizam. A abordagem permite o desenvolvimento de software que é focado nos requisitos complexos daqueles que precisam dele e não desperdiça esforços em qualquer coisa desnecessária. Os clientes de design orientado por domínio são frequentemente negócios de nível empresarial.

Para projetar a partir de uma perspectiva orientada por domínio, a área de especialização ou domínio do negócio deve ser definida. Existem domínios de suporte e domínios centrais. O domínio central de uma empresa é único e central para o seu funcionamento, recebendo, portanto, a maior parte da atenção, tempo e recursos no processo de desenvolvimento. Os domínios de suporte são mais gerais, tais como dinheiro, serviço ou tempo. Estes domínios são então modelados em linguagem e depois em código correspondente. Se um domínio não pode ser facilmente definido em linguagem, não está pronto para ser codificado. Se uma mudança é feita em um domínio de negócios, uma mudança correspondente no código seria geralmente necessária.

O livro Domain Driven Design de Eric Evans introduziu a filosofia. O design orientado para o domínio baseia-se na análise e design orientado para o objeto. A abordagem facilita a comunicação sobre o projeto em questão e  limita o foco nas necessidades centrais do domínio. Ao mesmo tempo, o design orientado por domínio requer um amplo conhecimento de um domínio e é pouco adequado para projetos altamente técnicos.