Aunque fuimos promotores iniciales de los microservicios y hemos visto el patrón utilizado con éxito en una gran variedad de sistemas, también hemos observado la aplicación incorrecta y el abuso de los microservicios, a menudo como resultado de la Envidia de microservicios. En lugar de comenzar un nuevo sistema con una colección de procesos desplegados por separado, a menudo es aconsejable empezar con un monolito bien estructurado y descomponerlo en unidades desplegables de manera independiente cuando la aplicación llega al nivel en que los beneficios de los microservicios superen la complejidad adicional inherente en los sistemas distribuidos. Recientemente hemos visto un resurgir del interés en esta aproximación y una definición más detallada de qué, exactamente, constituye un monolito bien estructurado. Spring Modulith es un framework que te ayuda a estructurar tu código de forma que sea más fácil descomponerlo en microservicios cuando llegue el momento adecuado. Proporciona una manera de modularizar tu código de modo que los conceptos lógicos de dominios y contextos acotados (bounded context) se alineen con los conceptos físicos de archivos y estructura de paquetes. Esta alineación facilita la refactorización del monolito cuando sea necesario, así como testear los dominios de manera aislada. Spring Modulith proporciona un mecanismo de eventos dentro del proceso que ayuda a desacoplar aún más los módulos dentro de una única aplicación. Lo mejor de todo es que se integra con ArchUnit y jmolecules para automatizar la verificación de sus reglas de diseño orientadas a dominio.