This library is a collection of interfaces and abstract classes to express domain-driven design concepts in Java code. Most types in this library are pure marker interfaces and only for documentation purposes. An added benefit is that IDEs can show all implementations of an interface, thus making it easy to discover all implementations of for example Value Objects or Entities.
Pattern (or Variant) | Implementation in this library | Example in Lakeside Mutual |
---|---|---|
Layered Architecture | n/a | Top-level packages in Lakeside Mutual backend represents the layers suggested by E. Evans in the "light blue" book |
Module | n/a | Java sub-packages in Domain Layer of Lakeside Mutual backends |
Entity | Entity | CustomerProfileEntity |
Value Object | ValueObject | PolicyPeriod |
Service | Service | See layer-specific variants below: |
Application Service | ApplicationService | CustomerService |
Domain Service | DomainService | InteractionLogService |
Infrastructure Service | InfrastructureService | CustomerCoreService |
Repository | Repository | CustomerRepository |
Factory | Factory | CustomerFactory |
Aggregate | Aggregate | CustomerAggregateRoot |
Bounded Context | BoundedContext | CustomerCoreApplication |
Context Map | n/a | n/a |
Subdomain patterns | n/a | n/a |
This website collects pointers to DDD resources, for instance:
- This DDD reference has pattern summaries.
- The DDD community features supporting material.
- InfoQ provides articles and presentations around DDD.
This DDD library was developed for the Lakeside Mutual sample application.
The DDD Sample Application that implements the running example in Eric Evans' Domain-Driven Design is also available on GitHub. It deals with cargo booking, routing and tracking.
The agile project management sample accompanying Implementing Domain-Driven Design by Vaughn Vernon can be found on GitHub as well.