Fomos defensoras iniciais dos microserviços e observamos o padrão sendo usado com sucesso em inúmeros sistemas, mas também vimos os microserviços sendo mal aplicados e abusados, muitas vezes como resultado do desejo de seguir a tendência de microserviços envy. Em vez de iniciar um novo sistema com uma coleção de processos separadamente implantados separadamente, geralmente é recomendável começar com um monolito bem dimensionado e só separar unidades implantáveis separadamente quando a aplicação atingir uma escala em que os benefícios dos microserviços compensem a complexidade adicional inerente aos sistemas distribuídos. Recentemente, vimos um ressurgimento do interesse por essa abordagem e uma definição mais detalhada do que constitui exatamente um monolito bem dimensionado. Spring Modulith é um framework que ajuda a estruturar seu código de uma forma que facilite a separação em microserviços quando for a hora certa. Ele fornece uma maneira de modularizar seu código para que os conceitos lógicos de domínios e contexto delimitados estejam alinhados com os conceitos físicos de arquivos e estrutura de pacotes. Esse alinhamento torna mais fácil refatorar o monolito quando necessário e testar domínios de forma isolada. Spring Modulith fornece um mecanismo interno de processamento de eventos que ajuda a desacoplar ainda mais os módulos dentro de um único aplicativo. O melhor de tudo é que ele se integra ao ArchUnit e ao jmolecules para automatizar a verificação de suas regras de design orientado a domínio.