18

Jul

Publicado por: Alex Magaz | Agile | Agile Methodologies | DDD | Domain-Driven Design | software development

¿Qué es Domain-Driven Design (DDD) y qué aporta al desarrollo de software?

Si estás en el sector del desarrollo de software, quizá has escuchado más de una vez el término DDD. Se refiere al “diseño guiado por el dominio”, conocido en inglés como “Domain-Driven Design”.

Este enfoque para desarrollo de software definido por Eric Evans en su libro Domain-Driven Design: Tackling Complexity in the Heart of Software, en el que expone un modelo rico, expresivo y en constante evolución que busca resolver problemas del dominio de una forma semántica.

El libro publicado en el 2004 recopila una serie de patrones y recomendaciones centradas en diseñar un modelo de dominio que ayude a tratar la complejidad de las aplicaciones. Aunque si te interesa saber más sobre el libro, en el artículo “Book Review: Domain-Driven Design” de Matt Carroll te explica con más detalle el libro de Eric Evans.

¡Pero no te confundas! El DDD no es una tecnología ni una metodología, es una técnica que está estructurada por varias prácticas que podrán ayudarte a tomar decisiones de diseño con el fin de enfocar y acelerar el manejo de dominios complejos durante el desarrollo de proyectos digitales.

Pero para explicarlo mejor, vamos por partes…

¿Qué problema resuelve?

Depende del caso o proyecto 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.
Es habitual que surja el anti-patrón “Modelo del Dominio Anémico”, en inglés (Anemic Domain Model). Si esto sucede, nos encontraremos con objetos que llevan nombres sacados del dominio y forman una estructura que, a primera vista, parece un modelo del dominio pero la realidad es que estos objetos son solo un conjunto de datos sin comportamiento, implementados por la lógica en objetos servicio.

Al hacer DDD evitamos esta y otras malas prácticas, previniendo así que acabemos con una aplicación complicada al momento de mantenerla.

¿Qué significa el Modelo?

El Modelo se refiere al conocimiento que el equipo tiene sobre el dominio. Este incluye solo la parte relevante para los casos de uso que se implementan en la aplicación.

La idea es que el conocimiento se vaya refinando y adaptando constantemente a medida que se aprenda sobre el dominio. El objetivo es ahorrar energía en soluciones técnicas y sobrecargo de los desarrolladores a aprender los principios del negocio.

El Modelo también se define como el lenguaje común usado por los desarrolladores y los expertos del dominio, lo que facilita la comunicación con los expertos y evita malos entendidos.

Pre-Requisitos para hacer DDD

Ahora que ya conoces lo que es DDD, necesitas cumplir con algunos requisitos indispensables:

  • El desarrollo debe ser iterativo. Esto será necesario para ir refinando el modelo del dominio continuamente a medida que aprendemos más sobre este y avanzamos.
  • Debe existir una estrecha relación entre los desarrolladores y los expertos del dominio. Como dije antes, el conocimiento profundo del dominio es esencial, al igual que la colaboración con los expertos de desarrollo durante la vida del proyecto; esto evitará malos entendidos entre las partes del equipo y ofrecerá la oportunidad de obtener un conocimiento más profundo del dominio.

Conclusión

Para cerrar esta introducción al DDD, quiero aclarar que esta técnica fue ideada para el desarrollo de aplicaciones complejas y está orientada a proyectos que usen metodologías ágiles.

Como debes saber, uno de los aspectos más complicados de los proyectos de software complejos está en el dominio del mundo real al que sirve el software y no en su implementación; es en este punto en el que el DDD te podrá ayudar a tener una mayor visión y enfoque para evolucionar a través de sucesivas iteraciones del diseño.

CTA-careers-development-justdigital

¿Te interesan las metodología de desarrollo ágiles? Continúa leyendo sobre AGILE con estos artículos:

 

Barcelona
Passeig Gaiolà 13
+34 933 801 144
Lleida
Carrer Agustins 7
+34 973 988 222
Andorra
(Escaldes-Engordany)
Parc de la Mola 10, AD700
Bogota
Carrera 9A #99-07 Piso 9. Despacho 02
Torre la Equidad