Cargo freighter passing under the Golden Gate bridge in San Fransisco. Image courtesy of FreeFoto.com.

One of the most requested aids to coming up to speed on DDD has been a running example application. Starting from a simple set of functions and a model based on the cargo example used in Eric Evans' book, we have built a running application with which to demonstrate a practical implementation of the building block patterns as well as illustrate the impact of aggregates and bounded contexts.

News

  • 2009-03-25: New public release: 1.1.0. See changelog for details.
  • 2009-03-09: Sample application tutorial at the QCon conference in London.
  • 2009-01-27: Sample application tutorial at the JFokus conference in Stockholm.
  • 2008-09-15: First public release: 1.0.

Purpose

  • A how-to example for implementing a typical DDD application

    Our sample does not show *the* way to do it, but a decent way. Eventually, the same design could be reimplemented on various popular platforms, to give the same assistance to people working on those platforms, and also help those who must transition between the platforms.

  • Support discussion of implementation practices

    Variations could show trade-offs of alternative approaches, helping the community to clarify and refine best practices for building DDD applications.

  • Lab mouse for controlled experiments

    There's a lot of interest in new tools or frameworks for DDD.

    Reimplementing the sample app using a new platform will give a side-by-side comparison with the "conventional" implementation, which can demonstrate the value of the new platform and provide validation or other feedback to the developers of the platform.

Caveats

Domain-driven design is a very broad topic, and contains lots of things that are difficult or impossible to incorporate into the code base of a sample application. Perhaps most important is communication with the domain expert, iterative modelling and the discovery of a ubiquitous language. This application is a snapshot in time, the result of a development effort that you need to imagine has been utilizing domain-driven design, to show how one can structure an application around an isolated, rich domain model in a realistic environment.

This project is a joint effort by Eric Evans' company Domain Language and the Swedish software consulting company Citerus.