1. Domain-Driven Design - Introduction

February 22, 2015

Domain-Driven Design, or DDD, is an approach for building high-quality software that meets core business objectives. It emphasizes collaboration among domain experts, developers, UX designers and other disciplines to create a domain model that reflects the needs of the business. This involves agreeing on common terminology (a.k.a. the Ubiquitous Language), identifying business entities, their behavior and relationships and organizing them in a way that lends itself to a clean and modular implementation.

This article explains DDD concepts using the example of a trading application called Bullsfirst. It is a sample application that demonstrates the use of best practices in software development. The diagram below shows the architecture of Bullsfirst.

Bullsfirst Platform

At a very high level, users can enter orders to buy and sell securities through the front-end. The orders are managed by an Order Management System (OMS), which is typically owned by a brokerage firm. The OMS places the orders in an Exchange where a matching engine matches them and executes trades.

This article has been structured to introduce the fundamental DDD concepts upfront. If you are a domain expert, developer, UX designer, tester or anyone generally interested in learning about DDD, go through sections 2 (Ubiquitous Language) and 3 (Domain Model). For a deeper understanding, especially for developers, go through all the remaining sections.


  1. Introduction
  2. Ubiquitous Language
  3. Domain Model
  4. Bounded Context
  5. Command-Query Separation
  6. Layered Architecture
  7. Domain Layer
  8. Conclusion

Naresh Bhatia

Written by Naresh Bhatia who lives and works in Boston building useful things. You should follow him on Twitter