Post

Spring Modulith

Spring Modulith

Se crea un proyecto rest multimódulo rest con spring.

Configuracion maven

  • Añadir spring modulith

Configuración de modulith

Añadir modulith en main-module

1
2
3
4
5
6
7
8
9
		<dependency>
			<groupId>org.springframework.modulith</groupId>
			<artifactId>spring-modulith-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.modulith</groupId>
			<artifactId>spring-modulith-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

Añadir test unitario para comprobar las dependencias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.modulith.core.ApplicationModules;
import org.springframework.modulith.docs.Documenter;

@SpringBootTest
class ModularityTests {

    ApplicationModules modules = ApplicationModules.of(Main.class);

    @Test
    void verifyModularity() {
        // Valida la estructura modular, falla si detecta dependencias inválidas entre módulos
        modules.verify();
    }

    @Test
    void generateDocumentation() {
        // Opcional: genera documentación visual sobre la modularidad
        new Documenter(modules)
            .writeDocumentation();
    }
}

Preguntas

¿Modulith valida dependencias dentro de un módulo o entre módulos? Spring Modulith valida principalmente dependencias entre módulos, no tanto internas (dentro de un mismo módulo). El objetivo de Modulith es asegurar que los módulos mantengan límites claros, que no existan dependencias cíclicas, y que la arquitectura modular sea consistente y explícita. Las dependencias internas (por ejemplo, entre paquetes dentro de un mismo módulo) no son el foco principal de Spring Modulith; esas se manejan habitualmente con otras herramientas o reglas simples de organización interna.

¿Cómo más puedes beneficiarte de Spring Modulith? Además de la validación estructural, Spring Modulith aporta otros beneficios clave:

Generación automática de documentación modular:

Genera gráficos y diagramas visuales de la estructura modular de tu aplicación automáticamente (como C4 Model o PlantUML). Eventos y comunicación intermodular:

Facilita un modelo basado en eventos explícitos, haciendo la comunicación entre módulos desacoplada, clara y fácilmente auditable. Claridad y mantenibilidad:

Fomenta límites claros de dominios, mejorando la legibilidad, mantenibilidad y facilidad de evolución de tu aplicación, alineándose con prácticas DDD. Soporte integrado con Spring Boot:

Completamente integrado con Spring Boot, aprovechando autoconfiguración, integración sencilla con módulos Spring, y validación en tiempo de ejecución y compilación.

Referencias

https://docs.spring.io/spring-modulith/reference/documentation.html https://ishansoninitj.medium.com/creating-a-multi-module-monolith-using-spring-modulith-f83053736762 https://piotrminkowski.com/2023/10/13/guide-to-modulith-with-spring-boot/

This post is licensed under CC BY 4.0 by the author.