O Domain-Driven Design (DDD ou Projeto Orientado a Domínio) é uma abordagem de desenvolvimento de software fundamentada em duas premissas:
O foco principal deve ser o domínio (classes);
Domínios complexos devem estar baseados em um modelo (herança).
O domínio de um software é “a área de ação, conhecimento e influência do software”. Sendo assim, focar no domínio é dar mais atenção à área de negócio que o software pretende cobrir do que a detalhes sobre tecnologias a serem empregadas em seu desenvolvimento.
Ao falarmos de modelo, geralmente associamos o termo a algum tipo de diagrama, como um diagrama de classes UML. No entanto, um modelo é mais do que um diagrama, ele é uma tradução do conhecimento dos especialistas de negócio para algo mais padronizado, uma espécie de “molde” do domínio.
Um diagrama, seja ele UML ou seguindo qualquer notação que você achar útil, pode ser uma ótima ferramenta para comunicar e registrar alguns aspectos do modelo, enquanto outros aspectos são transmitidos de forma mais clara diretamente pelo código.
Para ter um software que atenda perfeitamente a um determinado domínio, é necessário que se estabeleça, em primeiro lugar, uma Linguagem Ubíqua (Linguagem comum, com termos bem definidos, que fazem parte do domínio do negócio e que são usados por todas as pessoas que fazem parte do processo de desenvolvimento de software).
Nessa linguagem estão termos que fazem parte das conversas diárias entre especialistas de negócio e times de desenvolvimento. Todos devem usar os mesmos termos tanto na linguagem falada quanto no código.
Isso significa que, se durante uma conversa com um cliente do sistema de cobrança, por exemplo, ele disser: “Temos que emitir a fatura para o cliente antes da data limite”, vamos ter no nosso código alguma coisa do tipo:
Uma classe para a entidade Cliente;
Uma classe para a entidade Fatura;
Algum serviço que tenha um método emitir;
Algum atributo com o nome de data limite.
Utilizando a Linguagem Ubíqua criamos um modelo de domínio através do Projeto Dirigido pelo Modelo (Model Driven Design – MDD).
A idéia por trás de MDD é a de que o seu modelo abstrato deve ser uma representação perfeita do seu domínio. Tudo que existe no seu negócio deve aparecer no modelo. Só aparece no modelo aquilo que está no negócio.
Em resumo, basicamente é utilizar POO (Programação Orientada a Objetos)
Fontes:
http://www.devmedia.com.br/foco-ao-negocio-com-ddd-revista-engenharia-de-software-magazine-45/23566
http://www.agileandart.com/2010/07/16/ddd-introducao-a-domain-driven-design/