{"id":17039968,"url":"https://github.com/odrotbohm/sos","last_synced_at":"2025-04-13T10:44:22.066Z","repository":{"id":136845468,"uuid":"103446147","full_name":"odrotbohm/sos","owner":"odrotbohm","description":"Sample projects for my talk \"Refactoring to a System of Systems\"","archived":false,"fork":false,"pushed_at":"2021-11-29T14:24:37.000Z","size":1150,"stargazers_count":244,"open_issues_count":1,"forks_count":50,"subscribers_count":22,"default_branch":"main","last_synced_at":"2025-03-27T02:09:39.910Z","etag":null,"topics":["microservices","modularity","software-architecture","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/odrotbohm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-13T20:17:45.000Z","updated_at":"2025-02-13T09:58:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"cf3f0847-ae2d-4ab1-a4db-bafbbc0a6f6d","html_url":"https://github.com/odrotbohm/sos","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odrotbohm%2Fsos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odrotbohm%2Fsos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odrotbohm%2Fsos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/odrotbohm%2Fsos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/odrotbohm","download_url":"https://codeload.github.com/odrotbohm/sos/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248702115,"owners_count":21148114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["microservices","modularity","software-architecture","spring"],"created_at":"2024-10-14T09:08:11.033Z","updated_at":"2025-04-13T10:44:22.037Z","avatar_url":"https://github.com/odrotbohm.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Refactoring to a System of Systems\n\n_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._\n\nThis 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.\nSlides of that talk and a recording of it will be linked here as soon as they become available.\n\nThe repository contains five different projects, each of them potentially split into multiple ones in turn.\nFor details on the individual ones, please refer to the READMEs conatined in the individual project's root.\n\n## Context\n\nThe sample application is built around an e-commerce domain with the following Bounded Contexts:\n\n* _Catalog_ - containing product master data (in our case product name and price).\n* _Inventory_ - keeping track of the number of available items per product.\n* _Order_ - keeping track of orders placed by customers.\n\n![Domain](images/domain.png?raw=true \"Domain\")\n\nThe individual modules provide sketch implementations of these Bounded Context and the following interactions between them implemented:\n\n1. When a product is added, the inventory needs to register empty stock for that product.\n2. When an order is completed, the inventory needs to update the stock for the products ordered.\n\n## Modules\n\n* [_The Monolith_](00-monolith) - a typical monolithic Spring Boot application with the Bounded Contexts implemented in packages and the interaction being based on active invocations of Spring beans residing in a different BC.\n* [_The Microlith_](10-microlith) - the former approach transferred into separate systems but keeping the same interaction patter of synchronous, non-idempotent operations. The systems invoking each other via HTTP calls.\n* [_The Modulith_](20-modulith) - an improved version of the monolith with the Bounded Contexts interacting via Spring application events and event listeners.\n* [_SOS Messaging_](30-messaging-sos) - the individual Bounded Contexts implemented as separate systems and the interaction implemented via a Kafka message broker.\n* [_SOS REST_](40-restful-sos) - the individual Bounded Contexts implemented as separate systems and the interaction implemented via the events exposed as REST resources.\n\n![Project structure](images/structure.png?raw=true \"Project structure\")\n\n## Build\n\nThe repository should build by simply running `./mvnw clean install` using a recent JDK 8.\nSample code uses Lombok, which means that you need a Lombok-enabled IDE in case you want to import the projects into it.\nFor detailed instructions about how to work with the individual projects, see the individual module's READMEs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodrotbohm%2Fsos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fodrotbohm%2Fsos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fodrotbohm%2Fsos/lists"}