• Getting Started with DDD
✔ Can I DDD?
✔ Why You Should Do DDD
✔ How to Do DDD
✔ The Business Value of Using DDD
✔ The Organization Gains a Useful Model of Its Domain
✔ A Refined, Precise Definition and Understanding of the Business Is Developed
✔ Domain Experts Contribute to Software Design
✔ A Better User Experience Is Gained
✔ Clean Boundaries Are Placed around Pure Models
✔ Enterprise Architecture Is Better Organized
✔ Agile, Iterative, Continuous Modeling Is Used
✔ New Tools, Both Strategic and Tactical, Are Employed
✔ The Challenges of Applying DDD
✔ Fiction, with Bucketfuls of Reality
✔ Wrap-Up
• Domains, Subdomains, and Bounded Contexts
✔ Big Picture
✔ Subdomains and Bounded Contexts at Work
✔ Focus on the Core Domain
✔ Why Strategic Design Is So Incredibly Essential
✔ Real-World Domains and Subdomains
✔ Making Sense of Bounded Contexts
✔ Room for More than the Model
✔ Size of Bounded Contexts
✔ Aligning with Technical Components
✔ Sample Contexts
✔ Collaboration Context
✔ Identity and Access Context
✔ Agile Project Management Context
✔ Wrap-Up
• Context Maps
✔ Why Context Maps Are So Essential
✔ Drawing Context Maps
✔ Projects and Organizational Relationships
✔ Mapping the Three Contexts
✔ Wrap-Up
• Architecture
✔ Interviewing the Successful CIO
✔ Layers
✔ Dependency Inversion Principle
✔ Hexagonal or Ports and Adapters
✔ Service-Oriented
✔ Representational State Transfer—REST
✔ REST as an Architectural Style
✔ Key Aspects of a RESTful HTTP Server
✔ Key Aspects of a RESTful HTTP Client
✔ REST and DDD
✔ Why REST?
✔ Command-Query Responsibility Segregation, or CQRS
✔ Examining Areas of CQRS
✔ Dealing with an Eventually Consistent Query Model
✔ Event-Driven Architecture
✔ Pipes and Filters
✔ Long-Running Processes, aka Sagas
✔ Event Sourcing
✔ Data Fabric and Grid-Based Distributed Computing
✔ Data Replication
✔ Event-Driven Fabrics and Domain Events
✔ Continuous Queries
✔ Distributed Processing
✔ Wrap-Up
• Entities
✔ Why We Use Entities
✔ Unique Identity
✔ User Provides Identity
✔ Application Generates Identity
✔ Persistence Mechanism Generates Identity
✔ Another Bounded Context Assigns Identity
✔ When the Timing of Identity Generation Matters
✔ Surrogate Identity
✔ Identity Stability
✔ Discovering Entities and Their Intrinsic Characteristics
✔ Uncovering Entities and Properties
✔ Digging for Essential Behavior
✔ Roles and Responsibilities
✔ Construction
✔ Validation
✔ Change Tracking
✔ Wrap-Up
• Value Objects
✔ Value Characteristics
✔ Measures, Quantifies, or Describes
✔ Immutable
✔ Conceptual Whole
✔ Replaceability
✔ Value Equality
✔ Side-Effect-Free Behavior
✔ Integrate with Minimalism
✔ Standard Types Expressed as Values
✔ Testing Value Objects
✔ Implementation
✔ Persisting Value Objects
✔ Reject Undue Influence of Data Model Leakage
✔ ORM and Single Value Objects
✔ ORM and Many Values Serialized into a Single Column
✔ ORM and Many Values Backed by a Database Entity
✔ ORM and Many Values Backed by a Join Table
✔ ORM and Enum-as-State Objects
✔ Wrap-Up
• Services
✔ What a Domain Service Is (but First, What It Is Not)
✔ Make Sure You Need a Service
✔ Modeling a Service in the Domain
✔ Is Separated Interface a Necessity?
✔ A Calculation Process
✔ Transformation Services
✔ Using a Mini-Layer of Domain Services
✔ Testing Services
✔ Wrap-Up
• Domain Events
✔ The When and Why of Domain Events
✔ Modeling Events
✔ With Aggregate Characteristics
✔ Identity
✔ Publishing Events from the Domain Model
✔ Publisher
✔ Subscribers
✔ Spreading the News to Remote Bounded Contexts
✔ Messaging Infrastructure Consistency
✔ Autonomous Services and Systems
✔ Latency Tolerances
✔ Event Store
✔ Architectural Styles for Forwarding Stored Events
✔ Publishing Notifications as RESTful Resources
✔ Publishing Notifications through Messaging Middleware
✔ Implementation
✔ Publishing the NotificationLog
✔ Publishing Message-Based Notifications
✔ Wrap-Up
• Modules
✔ Designing with Modules
✔ Basic Module Naming Conventions
✔ Module Naming Conventions for the Model
✔ Modules of the Agile Project Management Context
✔ Modules in Other Layers
✔ Module before Bounded Context
✔ Wrap-Up
• Aggregates
✔ Using Aggregates in the Scrum Core Domain
✔ First Attempt: Large-Cluster Aggregate
✔ Second Attempt: Multiple Aggregates
✔ Rule: Model True Invariants in Consistency Boundaries
✔ Rule: Design Small Aggregates
✔ Don’t Trust Every Use Case
✔ Rule: Reference Other Aggregates by Identity
✔ Making Aggregates Work Together through Identity References
✔ Model Navigation
✔ Scalability and Distribution
✔ Rule: Use Eventual Consistency Outside the Boundary
✔ Ask Whose Job It Is
✔ Reasons to Break the Rules
✔ Reason One: User Interface Convenience
✔ Reason Two: Lack of Technical Mechanisms
✔ Reason Three: Global Transactions
✔ Reason Four: Query Performance
✔ Adhering to the Rules
✔ Gaining Insight through Discovery
✔ Rethinking the Design, Again
✔ Estimating Aggregate Cost
✔ Common Usage Scenarios
✔ Memory Consumption
✔ Exploring Another Alternative Design
✔ Implementing Eventual Consistency
✔ Is It the Team Member’s Job?
✔ Time for Decisions
✔ Implementation
✔ Create a Root Entity with Unique Identity
✔ Favor Value Object Parts
✔ Using Law of Demeter and Tell, Don’t Ask
✔ Optimistic Concurrency
✔ Avoid Dependency Injection
✔ Wrap-Up
• Factories
✔ Factories in the Domain Model
✔ Factory Method on Aggregate Root
✔ Creating CalendarEntry Instances
✔ Creating Discussion Instances
✔ Factory on Service
✔ Wrap-Up
• Repositories
✔ Collection-Oriented Repositories
✔ Hibernate Implementation
✔ Considerations for a TopLink Implementation
✔ Persistence-Oriented Repositories
✔ Coherence Implementation
✔ MongoDB Implementation
✔ Additional Behavior
✔ Managing Transactions
✔ A Warning
✔ Type Hierarchies
✔ Repository versus Data Access Object
✔ Testing Repositories
✔ Testing with In-Memory Implementations
✔ Wrap-Up
• Integrating Bounded Contexts
✔ Integration Basics
✔ Distributed Systems Are Fundamentally Different
✔ Exchanging Information across System Boundaries
✔ Integration Using RESTful Resources
✔ Implementing the RESTful Resource
✔ Implementing the REST Client Using an Anticorruption Layer
✔ Integration Using Messaging
✔ Staying Informed about Product Owners and Team Members
✔ Can You Handle the Responsibility?
✔ Long-Running Processes, and Avoiding Responsibility
✔ Process State Machines and Time-out Trackers
✔ Designing a More Sophisticated Process
✔ When Messaging or Your System Is Unavailable
✔ Wrap-Up
• Application
✔ User Interface
✔ Rendering Domain Objects
✔ Render Data Transfer Object from Aggregate Instances
✔ Use a Mediator to Publish Aggregate Internal State
✔ Render Aggregate Instances from a Domain Payload Object
✔ State Representations of Aggregate Instances
✔ Use Case Optimal Repository Queries
✔ Dealing with Multiple, Disparate Clients
✔ Rendition Adapters and Handling User Edits
✔ Application Services
✔ Sample Application Service
✔ Decoupled Service Output
✔ Composing Multiple Bounded Contexts
✔ Infrastructure
✔ Enterprise Component Containers
✔ Wrap-Up