Domain-driven design (DDD)

Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts. The premise of domain-driven design is the following:
  • Placing the project's primary focus on the core domain and domain logic
  • Basing complex designs on a model
  • Initiating a creative collaboration between technical and domain experts to iteratively cut ever closer to the conceptual heart of the problem.
Domain-driven design is not a technology or a methodology. DDD provides a structure of practices and terminology for making design decisions that focus and accelerate software projects dealing with complicated domains. Concepts introduced in Eric Evan's Domain-Driven Design book include :
  • Ubiquitous Language
  • Model-Driven Design
    • Layered Architecture
    • Entities
    • Value Objects
    • Services
    • Modules
    • Aggregates
    • Factories
    • Repositories
  • Refactoring toward deeper insight
  • Strategic Design
    • Bounded Countext
    • Continuous Integration
    • Context Map
    • Shared Kernel
    • Customer-Supplier
    • Conformist
    • Anticorruption Layer
    • Separate Ways
    • Open Host Service
    • Distillation
Alistair Cockburn's Hexagonal Architecture is also worth checking out when implementing applications using the DDD approach.

Books
Blogs and Twitter
Articles
Videos
Tools, frameworks and libraries
Forums and mailing-lists
Our training offer


Team of Pyxis