Recientemente, me toco explicar DDD a mis compañeros y tuve una pequeña laguna mental acerca de las diferencias entre un Bounded Context y un Sub-Domain, para tener frescas estas definiciones haré un post explicativo que me permita recordar las diferencias de estos conceptos de DDD. Mi punto de entrada a DDD es el curso en Pluralsight de Steve Smith y Julie Lerman, si lo has tomado encontraras definiciones calcadas de este, son muy buenas, recomiendo encarecidamente que lo tomes si quieres ahondar más en el tema.
¿Qué es un subdominio (Subdomain)?
Un subdominio no es más que la división de un dominio de problema en unidades de trabajo más pequeñas, atómicas e independientes para un fácil manejo. La preocupación de un subdominio es abarcar todo el espacio conceptual del problema.
¿Qué es un contexto acotado (Bounded Context)?
Un contexto acotado es el espacio que ocupa la implementación de la solución dentro del subdominio, esta es una definición ambigua porque tanto el contexto acotado como el subdominio pueden coincidir a la perfección. Por ejemplo, cuando diseñas un sistema desde cero, es obvio que el subdominio y los límites coincidirán porque ambos fueron hechos para encajar. En cambio, cuando defines un subdominio con elementos preexistentes, seguramente el contexto no encajara a la perfección con la definición del modelo.
Por ejemplo:
El equipo de desarrollo debe de realizar el modulo de ventas a publico general de la empresa. Cada venta deberá consultar con el viejo sistemas de inventarios, en caso de existir disponibilidad se registrara una orden y emitirá una factura correspondiente.
En el ejemplo anterior la principal tarea a resolver es la colocación de órdenes, en una interfaz para los clientes (que no se especifica). Se deja claro que existen elementos que no podrás controlar, modificar o adaptar para que sean fieles al modelo, seguramente se tendrá que hacer uso de algunas capas de abstracción. El espacio conceptual que va a ocupar la solución no encajara del todo bien en el problema de dominio, y está bien, no tiene por qué hacerlo.
Eric Evans define esta diferencia como:
Subdomain is a problem space concept. Bounded context is a solution espace concept.
El subdominio es un problema del espacio del concepto. El contexto acotado es una solución del espacio del concepto.
Una analogía de la vida real.
La analogía que se hace para dejar claras estas diferencias es:
Una habitación (subdominio) obviamente tiene límites y restricciones claras y definidas, el espacio que abarca es finito y conocido. Los mecanismos de comunicación (puertas y ventanas) también son explícitos. Supongamos que deseamos alfombrarla, en el mejor de los casos conseguiremos una alfombra que abarque en su totalidad y encaje a la perfección con la habitación. Pero, ¿qué pasaría si no se posee los materiales necesarios para alfombrar?. Entonces habría que buscar soluciones alternas, se pueden reciclar pedazos de sobrantes de otros proyectos, recortar las secciones dañadas de la alfombra anterior y reemplazarlos por nuevos, también se podrían poner muebles en esos lugares donde hay huecos. Esta implementación de la alfombra es el contexto acotado.
Autor imagen: Andrew Kuchling
Referencias:
- NVL in SQL Server - 2023-11-01
- ¿Que es Cake Build? - 2023-02-22
- #How to fix error: MSB4019: The imported project «Microsoft.Data.Tools.Schema.SqlTasks.targets» was not found - 2023-02-20