Curso de Arquitectura de Software Aplicada

Domain Driven Design para arquitectura limpia

Curso de Arquitectura de Software Aplicada

Contenido del curso

Domain Driven Design para arquitectura limpia

Resumen

Diseñar una solución de software empieza por elegir el enfoque correcto, y cuando el problema viene con un dominio definido (como el modelo de la OMA en un proyecto del BID), el domain driven design se vuelve la ruta más natural para arquitectos que buscan claridad y evolución sostenible.

¿Por dónde empezar a diseñar una solución de software?

Existen tres caminos clásicos y cada uno responde a un punto de partida distinto.

  • Top-down: arrancas por las interfaces externas.
  • Bottom-up: arrancas por el modelo de datos.
  • Domain driven design: arrancas por el dominio del negocio.

En proyectos donde te entregan un superdominio y te piden adaptarlo a un subconjunto funcional, el tercer camino gana. Te dan libertad, te sugieren un inicio del modelo y tu trabajo es acotarlo sin perder la esencia del negocio.

¿Qué es domain driven design? Es un enfoque de diseño que parte de las entidades, reglas y lenguaje del negocio para construir la arquitectura, en lugar de empezar por interfaces o bases de datos.

¿Cómo se construye un modelo de dominio simplificado?

Al principio, modelar todo es contraproducente. Mejor crea un modelo sobresimplificado y navega desde ahí las complejidades reales del problema.

Para expresarlo, un diagrama de clases de UML sigue siendo una herramienta clásica y efectiva. La idea es centrarte en el concepto más usado dentro de la especificación de requisitos. En el caso del BID, ese concepto es el archivo de factura electrónica de comercio exterior emitido por la aduana de exportación.

Lo valioso no es la cantidad de entidades que identifiques, sino las relaciones y cardinalidades entre ellas. Por ejemplo, una factura de comercio exterior puede ser la base para una factura generada por el importador, y la aduana de importación recibe muchas de estas. El importador también califica como entidad de dominio porque ejecuta acciones específicas sobre documentos derivados.

¿Qué entidades incluir y cuáles dejar fuera?

Incluye solo las entidades principales que se desprenden de los requisitos. No agregues todos los atributos ni todos los métodos desde el día uno.

Para dimensionar el contraste: el modelo de dominio público de la OMA tiene más de 296 entidades y cerca de 1.000 tipos de datos específicos. Existen modelos aún más grandes, evolucionados durante décadas. Tu versión inicial debe ser deliberadamente pequeña.

¿Por qué el modelo de dominio es el corazón de la arquitectura limpia?

La lógica de negocio fundamental debe vivir muy cerca de las entidades de dominio. Si tus entidades solo cargan atributos que otros servicios manipulan, terminas con entidades anémicas y la arquitectura limpia pierde sentido.

Un buen modelo de dominio te da tres beneficios concretos:

  • Crea un lenguaje común entre stakeholders técnicos y no técnicos.
  • Sirve para cualquier estilo arquitectónico porque concentra la lógica pura en pocas entidades.
  • Tiene una velocidad de cambio baja, porque las normas de negocio (como las de comercio exterior) no cambian de un día para otro.

Desde aquí puedes derivar tests y dirigir el desarrollo por pruebas. Las capas externas (casos de uso, adaptadores, interfaces) se apoyan en este núcleo sin contaminarlo.

¿Qué es una entidad anémica? Es una entidad que solo guarda datos sin contener lógica de negocio, dejando esa lógica dispersa en servicios externos. En arquitectura limpia se considera un antipatrón.

¿Cómo identificar adaptadores e interfaces externas?

Los requisitos del BID permiten una solución basada en traductores de datos entre modelos, es decir, adaptadores que conectan los modelos locales de cada país con el modelo general del sistema de factura electrónica.

La restricción es clave: esa solución se acepta para el prototipo, pero no para el sistema de largo plazo. Esa frase sola te marca la dirección de evolución del sistema.

Cuando el problema está bien acotado, también es fácil identificar:

  • Interfaces de seguridad, criptografía y gestión de identidad.
  • Abstracciones sobre mecanismos de persistencia.
  • Interfaces con sistemas de aduanas y tributos locales.

¿Qué pasa cuando el problema no está tan acotado?

En una startup o en problemas más abiertos, identificar estas interfaces desde el inicio es difícil. Tus decisiones deben ser más genéricas para sostener una arquitectura evolutiva que se adapte conforme descubres requisitos en etapas posteriores.

Diseñar como especializarse en un estilo de nado

Si el descubrimiento del problema es reconocer la piscina y las condiciones de nado, el diseño es elegir tu estilo. Decides dónde vas a ser competitivo, dónde pones las fichas y qué técnica vas a perfeccionar primero.

El diseño de un sistema, igual que la natación, es un ejercicio continuo de aprendizaje y refinamiento de técnicas. ¿Qué entidad de tu dominio crees que necesita más lógica de negocio y menos atributos sueltos? Cuéntalo en los comentarios.