DDD: ¿Qué es y cómo se aplica?

De acuerdo con Paradigma Digital, Domain Driven Design (DDD) es una aproximación holística al diseño de software que pone en el centro el Domain, es decir, el dominio o problema de negocio. No es una metodología para desarrollar software. El DDD provee una estructura de prácticas y terminologías para tomar decisiones de diseño que enfoquen y aceleren el manejo de dominios complejos en los proyectos de software.

Fue propuesta por primera vez por Eric Evans. Él es un líder de pensamiento en diseño de software y autor del libro “Domain-Driven Design” (Addison-Wesley 2004). En ese libro, explica como el DDD, representa distintas claves, terminología y patrones utilizados para desarrollar software donde el dominio es lo más central de una determinada organización.

Gracias al DDD, nos permite conocer de modo extenso el problema del negocio y que desean desarrollar los clientes. De esta forma, podamos dividirlo en subdominios con el objetivo de lograr así soluciones modulares, que premian la adaptabilidad de cada subdominio y, por lo tanto, la adaptabilidad de la solución en general.

En Tecnova revisaremos los principales conceptos de DDD, sus ventajas y desventajas y en donde se puede usar.

 

¿Para qué servirá el DDD?

De acuerdo con Just Digital, usar DDD dependerá del caso o proyecto dado que nos podemos encontrar con que la complejidad de muchas aplicaciones no está en la parte técnica sino en la lógica del negocio o dominio.

“El dilema empieza cuando intentamos resolver problemas del dominio con tecnología. Eso provoca que, aunque la aplicación funcione, no haya nadie capaz de entender realmente cómo lo hace”, afirman. Por tanto, una de las finalidades que tiene usar DDD es tener un diseño más cercano al lenguaje natural que al lenguaje técnico.

Según Paradigma Digital, para que esto tenga sentido, “debe complementarse con la adecuada decisión de patrones de diseño, inversión de dependencia (especial cuidado con las referencias cíclicas), encapsulación y ACL’s (capas anticorrupción, un patrón de diseño del cual hace referencia Martin Fowler, y que tratan la integración entre dominios)”.

 

Principales conceptos asociados a DDD

En DDD, es importante prestar atención a los siguientes términos. Revisemos:

Lógica de dominio

La lógica de dominio es el propósito del modelado. Comúnmente se conoce como la lógica de negocios. Aquí es donde las reglas de negocio definen la forma en que se crean, almacenan y modifican los datos.

Modelo de dominio

El modelo de dominio incluye las ideas, el conocimiento, los datos, las métricas y los objetivos que giran en torno al dominio (el problema del negocio) que se debe resolver. Contiene todas las reglas y patrones que le ayudarán a lidiar con la lógica empresarial compleja.

Subdominio

Un dominio tiene varios subdominios que hacen referencia a diferentes partes de la solución de negocios. Por ejemplo, una tienda minorista en línea podría tener un catálogo de productos, inventario y entrega como sus subdominios.

Patrones de diseño

Los patrones de diseño se centran en reutilizar código. No importa la complejidad del problema que encuentres, alguien que ha estado haciendo programación orientada a objetos probablemente ya ha creado un patrón que te ayudará a resolverlo. Dividir su problema en sus elementos iniciales le llevará a su solución.

Contexto delimitado

El contexto delimitado es un patrón central en el diseño guiado por dominio. En el contexto es donde se implementa el código, después de haber definido el dominio y los subdominios.

Los contextos delimitados representan los límites en los que se define y se aplica un determinado subdominio. Aquí, el subdominio específico tiene sentido, mientras que otros no. Una entidad puede tener nombres diferentes en contextos diferentes.

El lenguaje ubicuo

El lenguaje ubicuo es una metodología que se refiere al mismo lenguaje que los expertos y desarrolladores usan cuando hablan sobre el dominio en el que trabajan. Esto es necesario porque los proyectos pueden enfrentar problemas graves con un lenguaje interrumpido. Vale decir, entre los desarrolladores de software y el cliente que solicita el desarrollo.

Por eso es necesario definir un conjunto de términos que las dos partes utilicen. Todos los términos en el lenguaje ubicuo se estructuran en torno al modelo de dominio.

 

Los beneficios en usar DDD

  • Comunicación efectiva entre expertos del dominio y expertos técnicos a través de Ubiquitous Languge (Lenguaje Ubicuo).
  • Foco en el desarrollo de un área dividida del dominio (subdominio) a través de Bounded Context’s (Contexto Delimitado).
  • El software es más cercano al dominio, y por lo tanto es más cercano al cliente.
  • Código bien organizado, permitiendo el testing de las distintas partes del dominio de manera aisladas.
  • Lógica de negocio reside en un solo lugar y dividida por contextos.
  • Mantenibilidad a largo plazo.