8. Domain-Driven Design - Conclusion

Summary

  • Use Domain-Driven Design to collaborate among all project disciplines and clearly understand the business requirements.
  • Establish a Ubiquitous Language to discuss domain related concepts.
  • Use Bounded Contexts to break down complex domains into manageable parts.
  • Use Command-Query Separation to simplify your designs and improve performance.
  • Implement a Layered Architecture to focus on different aspects of the application.

Further Reading

  1. Eric Evans, Domain-Driven Design – The original work describing a vision and approach for dealing with highly complex domains.
  2. Vaughn Vernon, Implementing Domain-Driven Design – A detailed look at implementing systems using DDD - highly recommended.
  3. Abel Avram & Floyd Marinescu, Domain-Driven Design Quickly - an online book introducing the fundamentals of DDD.
  4. Bertrand Meyer, Command-Query Separation - an approach to simplify designs and improve performance by separating reads from writes
  5. Greg Young, Unshackle Your Domain – An excellent presentation describing the benefits of separating commands from queries and event driven design
  6. Greg Young, Command-Query Responsibility Segregation – this approach takes CQS a step further by creating two separate end-points for reads and writes
  7. Udi Dahan, Clarified CQRS – another nice article clarifying the CQRS pattern
  8. Martin Fowler, Anemic Domain Model – good argument against objects without behavior