2. El dominio del problema frente a la solución técnica

2.1 Introducción

Una de las distinciones más importantes en modelado de dominio es separar el dominio del problema de la solución técnica. El dominio del problema describe la realidad que el software debe comprender: conceptos del negocio, reglas, restricciones, eventos, estados y vocabulario. La solución técnica describe cómo construiremos el sistema: pantallas, bases de datos, clases, servicios, controladores, APIs, frameworks, servidores y mecanismos de persistencia.

Ambas dimensiones son necesarias, pero no deben mezclarse demasiado pronto. Si durante el análisis pensamos inmediatamente en tablas, endpoints o componentes de interfaz, corremos el riesgo de perder de vista el problema real. En cambio, si primero entendemos el dominio, las decisiones técnicas posteriores tendrán una base más clara.

2.2 Qué es el dominio del problema

El dominio del problema es el área de conocimiento donde existe la necesidad que el software debe atender. Incluye las personas, conceptos, procesos, documentos, reglas, restricciones y decisiones propias del negocio o actividad.

Por ejemplo, si se desarrolla un sistema de turnos médicos, el dominio del problema incluye pacientes, profesionales, especialidades, agendas, horarios disponibles, reservas, cancelaciones, ausencias, confirmaciones y reglas de atención. Nada de eso depende todavía de si el sistema será web, móvil, de escritorio o una API.

El dominio del problema responde preguntas como: qué existe en el negocio, qué significa cada concepto, qué reglas se deben cumplir y qué situaciones pueden ocurrir.

2.3 Qué es la solución técnica

La solución técnica es la forma concreta en que se decide implementar el sistema. Incluye arquitectura, lenguaje de programación, base de datos, interfaz de usuario, protocolos, servicios externos, frameworks, componentes, clases, archivos, tablas y despliegue.

En el sistema de turnos, la solución técnica podría incluir una aplicación web, una base de datos relacional, una tabla llamada turnos, una clase Turno, un controlador para reservas, un servicio de notificaciones y una API para consultar disponibilidad. Estos elementos son importantes, pero pertenecen al diseño e implementación, no al primer análisis del dominio.

La solución técnica debe servir al dominio, no reemplazarlo. Un sistema técnicamente elegante puede fallar si representa mal los conceptos y reglas del negocio.

2.4 Comparación entre ambos enfoques

La siguiente tabla resume diferencias habituales entre mirar el problema desde el dominio y mirarlo desde la solución técnica:

Aspecto Dominio del problema Solución técnica
Pregunta principal ¿Cómo funciona el negocio? ¿Cómo construiremos el sistema?
Elementos típicos Paciente, Turno, Agenda, Reserva, Cancelación. Tabla, clase, formulario, endpoint, servicio.
Lenguaje Vocabulario usado por usuarios y expertos del negocio. Vocabulario técnico usado por el equipo de desarrollo.
Objetivo Comprender reglas, significados y relaciones. Implementar una solución funcional, mantenible y eficiente.
Momento principal Análisis y validación del conocimiento. Diseño, construcción, pruebas técnicas y despliegue.

2.5 Por qué no conviene mezclar demasiado pronto

Mezclar dominio y solución técnica desde el inicio puede producir modelos confusos. Si en un diagrama de dominio aparecen elementos como PantallaAltaTurno, TablaProfesionales, ControladorReserva o TurnoDTO, el modelo empieza a describir la implementación en lugar del negocio. Eso dificulta la validación con usuarios y puede ocultar reglas importantes.

Cuando el modelo se llena de tecnología, los expertos del negocio dejan de reconocer su propio mundo. En lugar de revisar si las reglas son correctas, deben interpretar términos técnicos que no forman parte de su trabajo cotidiano. El modelo pierde su capacidad de ser una herramienta compartida.

Separar ambos planos no significa ignorar la tecnología. Significa postergar ciertas decisiones hasta tener suficiente comprensión del problema.

2.6 Ejemplo de confusión habitual

Supongamos que un equipo modela un sistema de turnos y escribe lo siguiente como conceptos principales:

FormularioTurno, TablaTurnos, BotónConfirmar, ServicioEmail, ControladorAgenda, TurnoDTO.

Estos nombres pueden aparecer en la solución técnica, pero no describen el dominio del problema. Un experto del consultorio probablemente hablará de paciente, profesional, agenda, horario, turno reservado, turno cancelado, confirmación, ausencia o sobreturno.

Una versión más orientada al dominio sería:

Paciente, Profesional, Especialidad, Agenda, Franja horaria, Turno, Reserva, Cancelación, Confirmación.

Esta segunda lista permite conversar sobre reglas reales: un profesional atiende una o varias especialidades, una agenda contiene franjas horarias, un paciente reserva un turno, una cancelación puede liberar una franja y una confirmación puede evitar ausencias.

2.7 Conceptos del negocio frente a artefactos técnicos

Un concepto del negocio existe porque tiene significado para el dominio. Un artefacto técnico existe porque ayuda a implementar la solución. A veces tienen nombres parecidos, pero no son lo mismo. Por ejemplo, puede existir el concepto de Turno en el dominio y también una clase Turno en el código o una tabla turnos en la base de datos.

La diferencia está en la intención. En el dominio, Turno significa una asignación de atención en una fecha y horario, con un paciente, un profesional y un estado. En la base de datos, turnos es una estructura para guardar datos. En el código, una clase Turno es una decisión de diseño que puede incluir atributos, métodos y validaciones.

El modelo de dominio debe cuidar primero el significado. Luego, durante el diseño, se decidirá cómo llevar ese significado a estructuras técnicas.

2.8 Señales de que el modelo está demasiado técnico

Algunas señales permiten detectar que un modelo de dominio se está contaminando con detalles técnicos:

  • Aparecen nombres como formulario, pantalla, botón, tabla, columna, DTO, controlador, endpoint o repositorio técnico.
  • Los expertos del negocio no pueden revisar el modelo sin explicación técnica extensa.
  • El modelo se organiza según la interfaz o la base de datos, no según los conceptos del negocio.
  • Las reglas aparecen como validaciones dispersas en pantallas, en lugar de expresarse como reglas del dominio.
  • Se habla más de cómo guardar datos que de qué significan esos datos.
  • El equipo decide tecnología antes de comprender excepciones, estados y restricciones importantes.

2.9 Señales de un buen enfoque de dominio

Un modelo orientado al dominio suele tener características claras:

  • Usa términos reconocibles por las personas que conocen el negocio.
  • Explica relaciones entre conceptos, no solo listas de datos.
  • Incluye reglas importantes, restricciones y condiciones de validez.
  • Permite discutir ejemplos concretos y casos excepcionales.
  • No depende de una tecnología específica para tener sentido.
  • Puede evolucionar cuando se descubre nuevo conocimiento del negocio.

El buen modelo de dominio no elimina la necesidad de diseño técnico. Lo que hace es preparar mejor ese diseño.

2.10 Abstracción: mirar lo esencial

Separar dominio y solución técnica requiere abstracción. Abstraer significa quedarse con lo esencial para el propósito actual y dejar fuera detalles que todavía no aportan. En análisis de dominio, lo esencial es entender el significado de los conceptos y reglas del negocio.

Por ejemplo, para comprender una reserva de turno, al comienzo no necesitamos decidir si se guardará en MySQL, PostgreSQL o MongoDB. Tampoco necesitamos definir el color del botón de confirmación. Primero necesitamos saber cuándo una reserva es válida, qué estados puede tener, quién puede crearla, quién puede cancelarla y qué consecuencias produce.

La abstracción no simplifica por descuido; simplifica para pensar mejor.

2.11 Del dominio a la solución técnica

Separar no significa aislar para siempre. El conocimiento del dominio debe alimentar la solución técnica. Una vez que se comprenden conceptos y reglas, el equipo puede decidir cómo representarlos en código, datos, interfaces y servicios.

Por ejemplo, si el dominio indica que un turno puede estar disponible, reservado, cancelado, atendido o ausente, esa información puede influir en un diagrama de estados, en validaciones, en casos de prueba, en el diseño de la base de datos y en las opciones visibles para el usuario. Si el dominio indica que una cancelación requiere cierta anticipación, esa regla debe aparecer en la implementación y no quedar como comentario informal.

El camino correcto no es ignorar la técnica, sino permitir que la técnica se apoye en una comprensión sólida del dominio.

2.12 El rol de los expertos del dominio

Los expertos del dominio son las personas que conocen cómo funciona el negocio. Pueden ser usuarios avanzados, responsables operativos, especialistas del área, administradores, médicos, contadores, vendedores, docentes o cualquier persona que entienda las reglas reales del trabajo.

Su participación es clave porque muchas reglas no están escritas o aparecen incompletas en documentos formales. Los expertos pueden explicar excepciones, prioridades, significados de términos, políticas internas y situaciones que ocurren en la práctica.

Un modelo demasiado técnico aleja a estos expertos. Un modelo de dominio bien expresado los invita a participar, corregir, discutir y validar.

2.13 Preguntas útiles para separar ambos planos

Durante el análisis, estas preguntas ayudan a mantener el foco en el dominio:

  • ¿Este término lo usa el negocio o lo inventamos por razones técnicas?
  • ¿Este elemento existiría aunque no hubiera software?
  • ¿Estamos describiendo una regla del negocio o una validación de pantalla?
  • ¿Un experto del dominio puede revisar este modelo y reconocer su trabajo?
  • ¿Estamos hablando de qué significa algo o de dónde se guardará?
  • ¿Esta decisión debe tomarse ahora o pertenece a una etapa posterior de diseño?

2.14 Qué debes recordar de este tema

  • El dominio del problema describe el negocio, sus conceptos, reglas, relaciones y restricciones.
  • La solución técnica describe cómo se implementará el sistema mediante tecnología concreta.
  • En modelado de dominio conviene comprender primero el problema antes de decidir la solución.
  • Un modelo con demasiados detalles técnicos pierde claridad para los expertos del negocio.
  • Conceptos del dominio y artefactos técnicos pueden tener nombres parecidos, pero cumplen propósitos distintos.
  • Separar ambos planos ayuda a reducir ambigüedad y a tomar mejores decisiones de diseño.
  • La solución técnica debe apoyarse en el conocimiento del dominio, no reemplazarlo.

2.15 Conclusión

Distinguir el dominio del problema de la solución técnica es una habilidad esencial para modelar bien. El dominio nos dice qué debe entender el software; la técnica nos permite construir una respuesta concreta. Cuando se mezclan sin cuidado, aparecen modelos difíciles de validar, reglas mal ubicadas y decisiones prematuras.

En este tema vimos cómo separar ambos planos, por qué esa separación mejora la comprensión y cómo reconocer señales de un modelo demasiado técnico. En el próximo tema veremos cómo se relacionan requerimientos, casos de uso, UML y modelo de dominio dentro del trabajo de análisis.