Capítulo 6. Lo que aprendí de DDD. Módulos y Bounded Contexts
DDD favorece la agrupación de nuestros archivos por conceptos específicos de nuestro dominio, definiendo módulos y bounded contexts.
--
Hoy toca hablar de otro de los conceptos que están fuertemente ligados al enfoque Domain Driven Design: los módulos y bounded contexts.
Ambas ideas nos van a ayudar a afrontar uno de los problemas más habituales a los que nos enfrentamos cuando programamos: cómo organizar nuestro código. Frameworks como Symfony o Angular ya proponen de partida una estructura para sus proyectos. Sin embargo, desde el momento en que decidimos que nuestro proyecto gire en torno a nuestro dominio, carece de sentido que sea la capa de infraestructura quien defina la jerarquía de directorios.
Lo que DDD propone es que nuestros módulos sean una forma semántica de separar distintos conceptos de nuestro dominio. Es decir, la definición de los módulos pasa a ser otra parte de nuestro dominio y no acoplada al framework o librería que estemos usando.
Pero antes de lanzarnos a la piscina, empecemos por el principio.
Dominio y Bounded Context
El dominio de nuestra aplicación define nuestro producto por completo: funcionalidad, casos de uso y entidades /servicios que los implementan.
Por ejemplo, imaginad un producto para gestionar una tienda física. Habrá una parte de la aplicación destinada a gestionar el stock, otra los pagos, otra las relaciones con clientes… Cada uno de estos 3 elementos podemos verlos como subdominios de nuestro producto, los cuales serán implementados por sus respectivos Bounded Contexts.
Es decir, el dominio define una estructura piramidal que comienza con él en la cúspide y del que cuelgan distintos subdominios que son implementados por Bounded Contexts.
Podéis ver, por tanto, un bounded context como el proyecto donde se desarrolla el sistema de gestión de stock de la aplicación, conteniendo dentro de él su propio back y front. Habitualmente los bounded contexts son separados en repositorios (cada uno el suyo propio), aunque últimamente también se está tendiendo a agrupar todo dentro de un…