A medida que la complejidad del desarrollo de software continúa aumentando, los desafíos que enfrentan los equipos de desarrollo son cada vez más importantes. Ya sea que el tiempo sea escaso o los requisitos cambien, los desarrolladores necesitan encontrar una solución para que el proceso de desarrollo del proyecto sea más eficiente. En este momento, el diseño impulsado por el dominio (DDD) se ha convertido en una estrategia popular.
"Centrarse en áreas centrales no es una opción, sino una necesidad."
El concepto más importante del diseño impulsado por el dominio es conectar eficazmente el modelo de software con el dominio del negocio. A través de conversaciones profundas con expertos en el campo, los desarrolladores pueden comprender la lógica del negocio y construir sistemas de software que no solo satisfagan las necesidades de los usuarios, sino que también puedan mantenerse de forma continua. La clave de este enfoque es centrarse en las áreas centrales en lugar de intentar resolver todos los problemas a la vez.
A través del diseño basado en dominios, podemos dividir sistemas grandes en varios "contextos delimitados", cada uno con su propio modelo independiente. Esta división ayuda a los equipos de desarrollo a centrarse en áreas funcionales específicas y reduce la interferencia entre departamentos. Al mismo tiempo, esto también promueve la colaboración creativa entre expertos de negocios y desarrolladores y les permite revisar iterativamente los modelos conceptuales.
"El diseño del modelo debe corresponderse con las necesidades del negocio. Esta es la clave para que el sistema sea fácil de mantener."
Otro beneficio de utilizar un diseño basado en el dominio es que enfatiza la importancia de un lenguaje unificado. El llamado lenguaje ubicuo es un lenguaje utilizado por expertos empresariales, usuarios y desarrolladores, que puede ayudar a garantizar que todos los participantes tengan una comprensión clara de los requisitos del negocio. Como todos se comunican en el mismo contexto, los errores de comunicación se pueden reducir de manera efectiva y se puede promover el progreso del proyecto.
Sin embargo, los críticos señalan que implementar DDD requiere mucho trabajo de aislamiento y encapsulación en términos de pureza y utilidad del modelo. Esto significa que los desarrolladores necesitan mantener constantemente la consistencia dentro de los límites del modelo y tratar las modificaciones futuras como una carga adicional. Especialmente para proyectos más pequeños o menos complejos, este enfoque puede resultar en gastos generales innecesarios. Por lo tanto, Microsoft recomienda adoptar DDD solo en dominios complejos donde valga la pena cuando el modelo proporciona claramente una comprensión comercial compartida.
DDD reconoce que existen múltiples modelos, los más comunes de los cuales incluyen entidades y objetos de valor. Una entidad es un objeto definido por su identidad, mientras que un objeto de valor se define por sus atributos y no tiene una identidad conceptual. Por ejemplo, la mayoría de las aerolíneas asignan un número único a cada asiento de un avión, que es la identidad del asiento. Por el contrario, cuando las personas intercambian tarjetas de presentación, prestan más atención a la información contenida en las tarjetas y no prestan especial atención a la singularidad de cada tarjeta.
"Comprender los diferentes tipos de modelos es la piedra angular para dominar el DDD".
En DDD, el proceso de creación de un objeto a menudo está separado del objeto en sí. Por ejemplo, un repositorio es un objeto que tiene métodos para recuperar objetos de dominio de un almacén de datos, como una base de datos. La fábrica se utiliza para crear directamente objetos de dominio. Además, si una parte de la funcionalidad del programa no pertenece conceptualmente a ningún objeto, normalmente se puede expresar a través de un servicio.
En DDD, los eventos se pueden dividir en varios tipos, los más importantes de los cuales son los "eventos de dominio" y los "eventos de integración". Los eventos de dominio señalan sucesos importantes dentro de un dominio empresarial específico, mientras que los eventos de integración se utilizan para comunicar cambios entre diferentes contextos límite. Ambos juegan un papel vital a la hora de garantizar la consistencia de los datos del sistema y la integridad de la lógica empresarial.
El mapeo de contexto es fundamental para identificar y definir los límites de diferentes dominios o subdominios. Ayuda a visualizar cómo interactúan estos contextos y cómo se relacionan, manteniendo así límites claros y reduciendo el acoplamiento.
Aunque el diseño orientado al dominio no necesariamente va de la mano con los métodos orientados a objetos, en la práctica sí complementa las fortalezas de estas técnicas. A diferencia de la arquitectura tradicional, DDD se centra en el comportamiento empresarial más que en un marco técnico específico.
ResumenYa sea a través de métodos como Event Storming, Event Sourcing o mediante el mapeo de contextos delimitados a microservicios, DDD proporciona una serie de herramientas y métodos para ayudar a los desarrolladores a comprender e implementar los requisitos comerciales. En última instancia, centrarse en las áreas centrales no sólo aumenta la probabilidad de éxito del proyecto, sino que también reduce eficazmente los costos de mantenimiento futuros. En este contexto, ¿han comenzado también a pensar en qué tipo de cambios puede aportar a sus proyectos de desarrollo el centrarse en sus áreas centrales?