Refactoring to a System of Systems

NOTE: This is currently highly work in progress. Be sure to check out every now and then for more detailed information and explanations about the individual modules.

This repository contains some sample code for my talk "Refactoring to a System of Systems" that outlines what problems developers can run into if they split up a system into multiple ones but transfer interaction patterns of typical monolithic applications as is. Slides of that talk and a recording of it will be linked here as soon as they become available.

The repository contains five different projects, each of them potentially split into multiple ones in turn. For details on the individual ones, please refer to the READMEs conatined in the individual project's root.

Context

The sample application is built around an e-commerce domain with the following Bounded Contexts:

Domain

The individual modules provide sketch implementations of these Bounded Context and the following interactions between them implemented:

  1. When a product is added, the inventory needs to register empty stock for that product.
  2. When an order is completed, the inventory needs to update the stock for the products ordered.

Modules

Project structure

Build

The repository should build by simply running ./mvnw clean install using a recent JDK 8. Sample code uses Lombok, which means that you need a Lombok-enabled IDE in case you want to import the projects into it. For detailed instructions about how to work with the individual projects, see the individual module's READMEs.