Trampas del diseño impulsado por el dominio (DDD)


Soy bastante nuevo con DDD y me gustaría saber sobre cualquier trampa que quiera compartir. Lo resumiré más adelante para que más novatos lo lean:)

Gracias

Resumen hasta ahora:

  • Modelo de dominio anémico donde sus entidades solo tienen datos y no contienen lógica de negocios
  • No usar suficientes contextos acotados
  • Centrarse demasiado en los patrones

También hay una buena presentación sobre este tema aquí (video).

Author: Piotr, 2010-11-16

7 answers

Probablemente el más importante: no grokking el principio central, fundamental del Modelo de Dominio y su representación en Lenguaje Ubicuo. Con la gran cantidad de opciones de tecnología alrededor, es muy fácil para su cabeza para llenar con frameworks, MVC frameworks, ajax, sql vs nosql,... Tanto es así que queda poco espacio para el problema real que estás tratando de resolver.

Y ese es el mensaje clave de DDD: no lo hagas. En su lugar, enfócate explícitamente en el espacio del problema primero y principal. Cree un modelo de dominio despojado de desorden arquitectónico que capture, exponga y comunique el dominio.

Ah, y otra: pensar que necesita Servicios de dominio para todo lo que puede hacer en el modelo de dominio. No. Siempre debe intentar primero poner la lógica de dominio con el tipo de Entidad / Valor al que pertenece. Solo debe crear servicios de dominio cuando encuentre funciones que no pertenecen naturalmente a un E / V. De lo contrario, terminará con el modelo de dominio anémico resaltado en otro lugar.

Hth.

 32
Author: sfinnie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-16 23:13:26

Uno de los mayores escollos es que terminas con un llamado modelo anémico donde tus entidades son principalmente solo portadoras de datos y no contienen lógica de negocios. Esta situación a menudo surge cuando construye su modelo de dominio sobre un modelo de datos relacional existente y simplemente hace que cada tabla en la base de datos sea una entidad en su modelo de dominio.

 14
Author: Klaus Byskov Pedersen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-16 16:57:56

Usted podría disfrutar presentación de Greg Young acerca de por qué DDD falla.

En breve:

  • Falta de intención
  • Modelo de Dominio Anémico
  • DDD-Lite
  • Falta de aislamiento
  • Ubicuo qué?
  • Falta de refinamiento
  • Experto en Dominios proxy (Analista de negocios)
 11
Author: Arnis Lapsa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-17 09:56:15

No usar contextos delimitados lo suficiente. Está hacia la parte posterior del gran libro azul, pero Eric Evans ha dejado constancia de que cree que los contextos limitados y el lenguaje ubicuo son los conceptos más importantes.

Del mismo modo, las personas tienden a centrarse demasiado en los patrones. Eso no es la carne de DDD.

Además, si no tiene mucho acceso a expertos en dominios, probablemente no esté haciendo DDD, en el mejor de los casos, es DDDish.

Más concretamente, si terminas con relaciones de muchos a muchos, probablemente has diseñado algo mal y necesitas reevaluar tus raíces/contextos agregados

 6
Author: George Mauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-16 17:39:20

Solo añadiendo a lo que otros ya han dicho; Mi experiencia personal es que las personas a menudo terminan con un modelo anémico y un modelo único en lugar de múltiples modelos específicos del contexto.

Otro problema es que muchos se centran más en la infraestructura y los patrones utilizados en DDD. Solo porque tengas entidades y repositorios y estés usando (n) Hubernate no significa que estés haciendo DDD.

 4
Author: Roger Johansson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-20 18:24:11

No es de mi experiencia personal con el sujeto, pero se mencionó un par de veces en libros DDD y es en lo que he estado pensando recientemente: use Entidades cuando realmente necesita identidad, en otros casos use Valor Objeto. Es decir, patrón de entidad a menudo pasa a ser la opción predeterminada para cualquier sustantivo de modelo, y no es la forma en que debería ser.

 4
Author: vorou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-27 10:42:23

Cuidado con el Gran Bola de Barro.

Uno de los escollos del diseño basado en dominios es introducir ambigüedad en un modelo. Como se explica en el artículo Diseño Estratégico Impulsado por el Dominio con Mapeo de Contexto:

La ambigüedad es el super-villano de nuestra Lenguaje ubicuo

Esto puede suceder cuando dos conceptos distintos comparten el mismo nombre, o cuando el mismo concepto puede tener diferentes usos. Puede ser necesario a

Exponer la estructura del dominio en términos de contextos acotados en un contexto mapa

Si un modelo se usa de muchas maneras diferentes, o tiene demasiadas responsabilidades, puede ser una señal de que debe dividirse.

 3
Author: Ed I,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-16 17:28:14