/implementations

52 - Week DDD Implementation Challenge

Primary LanguageJava

Introduction

This contains Practical DDD implementations for the Cargo Tracker Application across multiple programming languages and frameworks. It aims to demonstrate DDD concepts in the context of an execution platform. For a detailed walkthrough of the implementations please purchase the book -> https://www.amazon.com/s?k=practical+domain-driven+design+in+enterprise+java&crid=1R1SOSED7GAXW&sprefix=practical+domain%2Caps%2C389&ref=nb_sb_ss_i_1_16

Cargo Tracker Application

The Cargo Tracker Application acts as the reference application for the DDD implementations. In terms of DDD concepts there are 4 main sub-domains of the Cargo Tracker application - Booking , Tracking , Routing and Handling. The sub-domains are solutioned as Bounded Contexts.

*In case of a modulithic implementation, the Bounded Contexts are individual modules within the monolith *In case of a microservices implementation, each Bounded Context may contain a single/set of microservices centered around the root aggregate *In case of a CQRS/ES implementation (Axon Framework), the Bounded Contexts may either be implemented as microservices or modules within a monolith. The implementation detail will detail the same

Cargo Tracker Use Cases

A high level summary of the use cases is given below. The various Commands / Queries and Events are listed below.

Booking Bounded Context - This deals with all aspects of Booking Business Capabilities of the Cargo Tracker Application

Commands
  - Book a new Cargo
  - Route a booked Cargo
Queries
  - Retrieve Cargo Details basis the Booking Number
Events (Producer)
  - Cargo Booked
  - Cargo Routed

Tracking Bounded Context - This deals with all aspects of Tracking Business Capabilities of the Cargo Tracker Application

Commands
  - Assign Tracking Number to a Routed Cargo
Queries
  - Retrieve Cargo Details basis the Tracking Number
Events (Consumer)
  - Cargo Booked
  - Cargo Routed
  - Cargo Handled

Handling Bounded Context - This deals with all aspects of Handling Business Capabilities of the Cargo Tracker Application

Commands
  - Handle a Cargo
Queries
  - Get list of Handling Events of a Cargo
Events (Producer)
  - Cargo Handled

Routing Bounded Context - This deals with all aspects of Routing Business Capabilities of the Cargo Tracker Application

Commands
  - Create a Voyage
Queries
  - Get Optimal Route for a Cargo
Events (Producer/Consumer)
  - None

Implementations

The list below shows the current implementations available and what will be made available in the coming weeks. This is a 52-week exercise, so please check back for regular updates.

Week 1 (Available) - Spring Boot (Tomcat) + Spring Data + Spring Cloud + MySql + RabbitMQ

Week 2 (Available) - Jakarta EE 8 (Open Liberty 19.0.0.9) + MySql

Week 3 (Available) - MicroProfile 3.0 (Helidon v1.3.1) + Oracle DB Autonomous Cloud + RabbitMQ

Week 4 (In Progress) - MicroProfile 2.2 (Payara Micro) + MySql + Payara Clustered Events

Week 5 (Planned) - Axon Framework 4.2 + Axon Server 4.2