When evaluating different implementation approaches for a set of bounded contexts, a modular, monolithic application constitutes a pragmatic alternative to a microservices architecture, which comes with the challenges and complexities of a distributed system. Still, in the course of their lifetime, modularity and maintainability of monolithic applications very often degrade significantly.
This talk briefly identifies the common issues in unstructured monoliths and discusses approaches to package design, component structure, transactions, and the usage of events to implement bounded context interaction. We also take a look at supporting technologies and features of the Spring (Boot) ecosystem to easily test individual bounded contexts and detect architectural violations. Attendees will learn how to easily implement architectural concepts into modular, monolithic applications, how to preserve the architecture over time, and how to prepare a potential split into multiple systems later.