Devoxx Belgium 2018
from Monday 12 November to Friday 16 November 2018.
Oliver Gierke is the lead of the Spring Data project at Pivotal, Java Champion and member of the JPA 2.1 expert group. He has been into developing enterprise applications and open source projects for over 12 years now. His working focus is centered around software architecture, DDD, REST, and persistence technologies. He is regularly speaking at German and international conferences and the author of technology articles as well as the first book on Spring Data.
See also www.olivergierke.de
Teams that have built monoliths for years are used to certain patterns of interaction between different parts of the code base. Simply replicating those patterns when splitting up a system into a distributed one usually introduces a lot of complexity and drawbacks that often totally subvert the desired effects of a split up of the system in the first place.
The talk takes a look at a concrete sample of monolithic module interactions and identifies the problems that arise if that approach is transferred as-is into a distributed system. We then discuss an alternative variant of the monolithic implementation and how that approach improves the system's modularity for the monolith and how it minimizes the cost and problems when splitting up the monolith or even starting with a system of systems in the first place.
When evaluation different implementation approaches for a set of bounded contexts, a modular, monolithic application constitutes a pragmatic alternative to a microservices architecture that comes with challenges and complexities of a distributed system. Still, in the course of their life time, modularity and maintainability of monolithic applications very often degrade significantly. This is usually caused by the gap between architectural concepts and the codebase implementing those.
The talk briefly identifies the commonly observed issues in unstructured monoliths and discusses approaches to code organization and component structure, package design, 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) eco-system 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 to prepare a potential split into multiple systems at a later point in time.
Most APIs built today are considered REST APIs these days, when in fact they merely exchange data via HTTP and JSON. At the same time, systems almost never act autonomously but rather live alongside others. In that context, being able to evolve an API becomes a crucial aspect in its design and the only knee-jerk, but often problematic reaction usually is: versioning.
The talk takes a step back and looks at the architectural context APIs live in and outlines the drawbacks that result from ignoring crucial parts of REST. It discusses internal VS. external APIs, whether that distinction is useful in the first place, the impact of Domain-Driven Design and how to design and specify APIs and their clients to optimize for evolvability so that changes in an API don’t break clients.