What Is Domain-Driven Design?

Book Description

The majority of software projects are delivered late or over budget, or they fail to meet the client’s requirements. Attack the problem head-on and build better software with domain-driven design (DDD)—a methodology that aligns software design with a business’s domain, needs, and strategy. In this report, Vladik Khononov introduces the key patterns and practices of domain-driven design and shows you how to apply them to improve the success rate of your projects.

You’ll discover how to explore, analyze, and model your company’s business domain along with techniques for implementing that knowledge. Once you understand the fundamentals, you’ll be able to selectively apply DDD concepts to analyze and simplify your codebase, explore new requirements, and more.

You’ll learn:

  • Key domain-driven design concepts, including ubiquitous language and bounded contexts
  • How to employ “event storming” to streamline the process of discovering domain knowledge and building a ubiquitous language
  • Patterns and techniques for implementing business logic and architecting solutions that deliver business goals
  • How to maintain and evolve both tactical and strategic designs over time

Table of Contents

  1. Introduction
    1. What Is Domain-Driven Design?
      1. Strategic Design
      2. Tactical Design
    2. Report Structure
  2. I. Strategic Design
  3. 1. Analyzing Business Domains
    1. What Is a Business Domain?
    2. What Is a Subdomain?
      1. Types of Subdomains
    3. Who Are Domain Experts?
    4. Conclusion
  4. 2. Discovering Domain Knowledge
    1. Knowledge Discovery
      1. Communication
    2. What Is Ubiquitous Language?
      1. Language of the Business
      2. Examples
      3. Consistency
    3. Model of the Business Domain
      1. What Is a Model?
      2. Effective Modeling
      3. Modeling the Business Domain
    4. Continuous Effort
    5. Conclusion
  5. 3. Managing Complexity with Bounded Contexts
    1. Example: Inconsistent Models
    2. What Is a Bounded Context?
      1. Model Boundaries
    3. Scope of a Bounded Context
    4. Bounded Contexts Versus Subdomains
      1. Subdomains
      2. Bounded Contexts
      3. The Interplay Between Subdomains and Bounded Contexts
    5. Physical Boundaries
    6. Ownership Boundaries
    7. Conclusion
  6. 4. Context Mapping
    1. Cooperation
      1. Partnership
      2. Shared Kernel
    2. Customer–Supplier
      1. Conformist
      2. Anticorruption Layer
      3. Open-Host Service
    3. Separate Ways
      1. Communication Issues
      2. Generic Subdomains
      3. Model Differences
      4. When to Avoid
    4. Context Map
    5. Conclusion
  7. II. Tactical Design
  8. 5. Business Logic Implementation Patterns
    1. Transaction Script
    2. Active Record
    3. Domain Model
      1. Implementation
      2. Building Blocks
      3. Other Building Blocks
    4. Event-Sourced Domain Model
      1. Event Sourcing
      2. Source of Truth
      3. Advantages
    5. Conclusion
  9. 6. Architectural Patterns
    1. Layered Architecture
      1. Use Cases
    2. Ports & Adapters
      1. Integration of Infrastructural Components
      2. Use Cases
    3. Command-Query Responsibility Segregation
      1. Polyglot Modeling
      2. Implementation
      3. Projecting Read Models
      4. Challenges
      5. Model Segregation
      6. Use Cases
    4. Conclusion
  10. 7. Integration of Bounded Contexts
    1. Partnership and Shared Kernel
    2. Anticorruption Layer
    3. Open-Host Service
      1. Domain Events
  11. III. DDD in Practice
  12. 8. Event Storming
    1. Who Should Participate in Event Storming?
    2. What Do You Need for Event Storming?
      1. Modeling Space
      2. Stickies
      3. Markers
      4. Snacks
      5. Room
    3. The Event Storming Process
      1. Step 1: Unstructured Exploration
      2. Step 2: Timelines
      3. Step 3: Commands
      4. Step 4: Policies
      5. Step 5: External Systems
      6. Step 6: Aggregates
      7. Step 7: Bounded Contexts
    4. Conclusion
  13. 9. Evolutionary Design
    1. Changes in Subdomains
      1. Core to Generic
      2. Generic to Core
      3. Supporting to Core
      4. Tactical Design Concerns
    2. Organizational Changes
    3. Domain Knowledge
    4. Conclusion
  14. 10. Getting Started with Domain-Driven Design
    1. Ubiquitous Language
    2. Business Domain
    3. Context Map
    4. Bounded Contexts
    5. Event Storming
    6. Tactical Patterns
      1. Value Objects
      2. Transaction Boundaries
      3. Event-Sourced Domain Model
    7. Conclusion

Product Information

  • Title: What Is Domain-Driven Design?
  • Author(s): Vladik Khononov
  • Release date: October 2019
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9781492057796