Definición de dominio en la Arquitectura Hexagonal
El dominio de ControlEscolar modela materias, prerrequisitos, inscripciones y actividades evaluadas usando DDD y Arquitectura Hexagonal. Define reglas como máximo de tres intentos, cálculo por promedio y validación de prerrequisitos, todo sin depender de tecnología externa.
Definición Completa del Dominio (DDD + Hexagonal)
Modelado académico con Domain-Driven Design y Arquitectura Hexagonal
ControlEscolar es una aplicación personal diseñada para que un estudiante de la UnADM administre su trayectoria académica de manera estructurada. Aunque el proyecto es de uso individual, se construye usando prácticas profesionales: DDD (Domain-Driven Design) y Arquitectura Hexagonal, apoyadas en .NET 10 LTS.
Este documento define el Dominio del sistema, es decir, el conjunto de conceptos, reglas, entidades e invariantes que representan la realidad académica del alumno. Todo lo que aparece aquí vive en la capa Domain del proyecto y es completamente independiente de EF Core, SQL Server u otras tecnologías.
Propósito del Dominio
El dominio de ControlEscolar busca representar fielmente la experiencia académica del estudiante:
- materias y su seriación,
- inscripciones por periodo,
- actividades evaluadas,
- calificaciones,
- historial académico,
- restricciones e invariantes (intentos máximos, prerrequisitos, etc.).
En la Arquitectura Hexagonal, el dominio debe ser puro: no contiene consultas SQL, no tiene dependencias externas y no conoce frameworks.
Su única responsabilidad es expresar reglas y comportamientos significativos.
Conceptos Fundamentales del Dominio
El dominio está compuesto por tres ejes principales:
- Plan de estudios
- Materias
- Prerrequisitos
- Identificación por código
- Semestre y módulo
- Trayectoria académica del alumno
- Inscripciones
- Intentos permitidos
- Estados de aprobación o reprobación
- Actividades evaluadas
- Tareas
- Foros
- Cuestionarios
- Evidencias (Todas modeladas uniformemente)Entidades, Agregados y Value Objects
A continuación, se presenta el modelo formal del dominio.
Entidad: Materia
Una Materia representa una asignatura oficial del plan de estudios.
Atributos
- Id
- CodigoMateria (Value Object)
- Nombre
- Modulo (extraído del código)
- Semestre (extraído del código)
- SemestreOficial? (nullable)
- PrerrequisitoId? (nullable, máximo 1)
Invariantes
- El código debe ser válido.
- Como máximo puede tener un prerrequisito.
- Si existe prerrequisito, debe hacer referencia a otra Materia válida.
Responsabilidad
- Expresar la estructura académica y la seriación entre materias.
- No maneja inscripciones ni calificaciones.
Value Object: CodigoMateria
Encapsula la estructura oficial del código de una materia:
- Carrera (2 dígitos)
- Módulo (1 dígito)
- Semestre (1 dígito)
- Consecutivo (2 dígitos)
Propiedades
- Inmutable
- Valida la estructura al construirse
- Expone propiedades derivadas (módulo, semestre, consecutivo)
Ejemplo
15141212 → Carrera=1514, Módulo=1, Semestre=2, Consecutivo=12
Value Object: PeriodoLectivo
Representa un periodo académico como:
- Año (ej. 2026)
- Parte: 1 o 2
Invariantes
- Parte ∈ {1, 2}
- Año ≥ año de ingreso (validación opcional)
Este VO permite evitar cadenas ambiguas como"2026_2"y reemplazarlas por un tipo fuerte.
Agregado Raíz: Inscripción
La Inscripción es el núcleo del dominio. Representa que el alumno cursa una Materia en un PeriodoLectivo dado.
Atributos
- MateriaId
- PeriodoLectivo
- Asesor (texto)
- Intento (1, 2 o 3)
- Estado: Activa | Aprobada | Reprobada
- Actividades (colección)
Reglas clave del dominio
- No se puede crear una inscripción si:
- La materia ya fue aprobada previamente.
- Existen ya tres reprobaciones.
- No se aprobó su prerrequisito.
- Solo puede existir una inscripción por materia por periodo.
Cierre de inscripción
Al cerrarse una inscripción, la aplicación:
- Calcula el promedio de las actividades.
- Determina si la inscripción quedó Aprobada o Reprobada.
- Si hay tres reprobaciones consecutivas, la materia queda definitivamente no cursable.
Entidad: Actividad (Tarea, Cuestionario, Evidencia)
Una Actividad es cualquier elemento evaluado dentro de una inscripción.
Ejemplos:
- Tarea escrita
- Cuestionario
- Actividad complementaria
- Proyecto final
- Foro evaluado
Atributos
- Descripcion
- FechaEntrega
- Tipo (tarea, cuestionario, evidencia…)
- Calificacion (0–100)
Regla
Todas las actividades usan calificación de 0 a 100.
La calificación final es un promedio simple.
Reglas Globales del Dominio (Invariantes)
- Máximo 3 intentos por materia
- Tres reprobaciones ⇒ no se puede reinscribir.
- Regla de prerrequisito
- Se debe aprobar el prerrequisito antes de cursar la materia dependiente.
- Inscripciones por periodo
- Solo se permite una inscripción de la misma materia en el mismo periodo.
- Cálculo de calificación
- La calificación final es el promedio simple de las actividades.
- Estados posibles
Aprobadasi promedio ≥ 70Reprobadasi promedio < 70
- Pureza del dominio
El dominio no conoce SQL, EF Core, archivos ni infraestructura técnica.
Casos de Uso Derivados del Dominio
Aunque los casos de uso pertenecen a la capa Application, su origen está en el dominio:
- Inscribirse a una materia
Validación de intentos, prerrequisitos y estado previo. - Registrar actividad evaluada
Agregar actividades con calificación opcional. - Calificar actividad
Actualizar calificación 0–100. - Cerrar inscripción
Determinar aprobación o reprobación. - Reinscribirse a una materia
Solo si no se han excedido los intentos. - Consultar historial académico
Diagrama Conceptual
Materia
├── CodigoMateria (VO)
├── PrerrequisitoId?
└── SemestreOficial?
Inscripcion (Agregado raíz)
├── MateriaId
├── PeriodoLectivo (VO)
├── Asesor
├── Intento
├── Estado
└── Actividades[*]
Actividad
├── Descripcion
├── FechaEntrega
├── Tipo
└── Calificacion (0–100)
Glosario del Dominio
- Materia: Asignatura oficial; puede tener un prerrequisito.
- CodigoMateria: Identificador compuesto; asegura validez.
- PeriodoLectivo: Estructura que define año y parte del semestre.
- Inscripción: Acto de cursar una materia en un periodo dado.
- Actividad: Elemento evaluado (tarea, evidencia, cuestionario, etc.).
- Intento: Número de veces que el alumno ha cursado una materia.
- Estado: Aprobada, Reprobada o Activa.
- Invariante: Regla que siempre debe cumplirse.
- Agregado: Grupo de entidades con una raíz que controla su consistencia.
Conclusión
El dominio de ControlEscolar es una representación limpia, coherente y totalmente independiente de la infraestructura. Su propósito es permitir:
- claridad conceptual,
- validaciones estrictas,
- evolución futura sin romper reglas,
- independencia de bases de datos,
- casos de uso bien definidos,
- y pruebas unitarias sin dependencias externas.
Con el Dominio v1.0 definido, el siguiente paso natural es establecer los Contratos (Interfaces) que la aplicación usará para comunicarse con SQL Server y otros sistemas externos mediante la Arquitectura Hexagonal.