Respuestas:
En primer lugar, si no sabe que lo necesita, es posible que no lo necesite. Si no reconoce los problemas que resuelve DDD, entonces tal vez no tenga esos problemas. Incluso los defensores de DDD con frecuencia señalarán que DDD solo está destinado a proyectos grandes (> 6 meses).
Asumiendo que todavía estás leyendo en este punto, mi opinión sobre DDD es esta:
DDD se trata de tratar de hacer que su software sea un modelo de un sistema o proceso del mundo real. Al usar DDD, debe trabajar en estrecha colaboración con un experto en dominios que puede explicar cómo funciona el sistema del mundo real. Por ejemplo, si está desarrollando un sistema que maneja la colocación de apuestas en carreras de caballos, su experto en dominios podría ser un corredor de apuestas experimentado.
Entre usted y el experto en dominio, crea un lenguaje ubicuo (UL), que es básicamente una descripción conceptual del sistema. La idea es que pueda escribir lo que hace el sistema de manera que el experto en el dominio pueda leerlo y verificar que sea correcto. En nuestro ejemplo de apuestas, el lenguaje omnipresente incluiría la definición de palabras como "raza", "apuesta", "probabilidades", etc.
Los conceptos descritos por UL formarán la base de su diseño orientado a objetos. DDD proporciona una guía clara sobre cómo deben interactuar sus objetos y lo ayuda a dividir sus objetos en las siguientes categorías:
DDD también recomienda varios patrones:
Ahora, en este punto, tengo que decir que si no has oído hablar de ninguna de estas cosas antes, no deberías tratar de usar DDD en ningún proyecto para el que tengas una fecha límite. Antes de intentar DDD, debe estar familiarizado con los patrones de diseño y los patrones de diseño empresarial . Saber esto hace que DDD sea mucho más fácil de entender. Y, como se mencionó anteriormente, hay una introducción gratuita a DDD disponible en InfoQ (donde también puede encontrar charlas sobre DDD).
Tome StackOverflow como ejemplo. En lugar de comenzar a diseñar algunos formularios web, primero se concentra en hacer modelos orientados a objetos de las entidades dentro de su dominio del problema, por ejemplo, Usuarios, Preguntas, Respuestas, Votos, Comentarios, etc. Dado que el diseño se basa en los detalles del problema dominio se llama diseño impulsado por dominio .
Puedes leer más en el libro de Eric Evans .