Read more
Methods for managing complex software construction following the practices, principles and patterns of Domain-Driven Design with code examples in C#
This book presents the philosophy of Domain-Driven Design (DDD) in a down-to-earth and practical manner for experienced developers building applications for complex domains. A focus is placed on the principles and practices of decomposing a complex problem space as well as the implementation patterns and best practices for shaping a maintainable solution space. You will learn how to build effective domain models through the use of tactical patterns and how to retain their integrity by applying the strategic patterns of DDD. Full end-to-end coding examples demonstrate techniques for integrating a decomposed and distributed solution space while coding best practices and patterns advise you on how to architect applications for maintenance and scale.
* Offers a thorough introduction to the philosophy of DDD for professional developers
* Includes masses of code and examples of concept in action that other books have only covered theoretically
* Covers the patterns of CQRS, Messaging, REST, Event Sourcing and Event-Driven Architectures
* Also ideal for Java developers who want to better understand the implementation of DDD
List of contents
INTRODUCTION xxxv
PART I: THE PRINCIPLES AND PRACTICES OF DOMAIN-DRIVEN DESIGN
CHAPTER 1: WHAT IS DOMAIN-DRIVEN DESIGN? 3
The Challenges of Creating Software for Complex Problem Domains 4
How the Patterns of Domain-Driven Design Manage Complexity 6
The Practices and Principles of Domain-Driven Design 11
Popular Misconceptions of Domain-Driven Design 12
The Salient Points 13
CHAPTER 2: DISTILLING THE PROBLEM DOMAIN 15
Knowledge Crunching and Collaboration 15
Gaining Domain Insight with Domain Experts 18
Patterns for Effective Knowledge Crunching 19
Look For Existing Models 24
The Salient Points 29
CHAPTER 3: FOCUSING ON THE CORE DOMAIN 31
Why Decompose a Problem Domain? 31
How to Capture the Essence of the Problem 32
How to Focus on the Core Problem 33
Treat Your Core Domain as a Product Rather than a Project 36
How Subdomains Shape a Solution 37
Not All Parts of a System will be Well Designed 37
What if You Have no Core Domain? 39
The Salient Points 40
CHAPTER 4: MODEL?]DRIVEN DESIGN 41
What Is a Domain Model? 42
Model-Driven Design 44
Using a Ubiquitous Language to Bind the Analysis to the Code Model 47
Collaborating on a Ubiquitous Language 48
How to Create Effective Domain Models 52
When to Apply Model?]Driven Design 56
The Salient Points 57
CHAPTER 5: DOMAIN MODEL IMPLEMENTATION PATTERNS 59
The Domain Layer 60
Domain Model Implementation Patterns 60
The Salient Points 71
CHAPTER 6: MAINTAINING THE INTEGRITY OF DOMAIN MODELS WITH BOUNDED CONTEXTS 73
The Challenges of a Single Model 74
Use Bounded Contexts to Divide and Conquer a Large Model 79
Implementing Bounded Contexts 85
The Salient Points 89
CHAPTER 7: CONTEXT MAPPING 91
A Reality Map 92
Recognising the Relationships between Bounded Contexts 95
Communicating the Context Map 100
The Strategic Importance of Context Maps 101
The Salient Points 103
CHAPTER 8: APPLICATION ARCHITECTURE 105
Application Architecture 105
Application Services 112
Application Clients 117
The Salient Points 120
CHAPTER 9: COMMON PROBLEMS FOR TEAMS STARTING OUT WITH DOMAIN?]DRIVEN DESIGN 121
Overemphasizing the Importance of Tactical Patterns 122
Missing the Real Value of DDD: Collaboration, Communication, and Context 124
Producing a Big Ball of Mud Due to Underestimating the Importance of Context 124
Causing Ambiguity and Misinterpretations by Failing to Create a UL 125
Designing Technical-Focused Solutions Due to a Lack of Collaboration 125
Spending Too Much Time on What's Not Important 126
Making Simple Problems Complex 126
Underestimating the Cost of Applying DDD 127
The Salient Points 130
CHAPTER 10: APPLYING THE PRINCIPLES, PRACTICES, AND PATTERNS OF DDD 131
Selling DDD 132
Applying the Principles of DDD 133
Exploration and Experimentation 142
Making the Implicit Explicit 143
A Problem Solver First, A Technologist Second 146
How Do I Know That I Am Doing It Right? 146
The Salient Points 147
PART II: STRATEGIC PATTERNS: COMMUNICATING BETWEEN BOUNDED CONTEXTS
CHAPTER 11: INTRODUCTION TO BOUNDED CONTEXT INTEGRATION 151
How to Integrate Bounded Contexts 152
Integrating Distribu
About the author
Scott Millett is the Director of IT for Iglu.com, and has been working with .NET since version 1.0. He was awarded the ASP.NET MVP in 2010 and 2011, and is the author of
Professional ASP.NET Design Patterns and Professional Enterprise .NET. Nick Tune is a software developer delivering solutions to complex business problems using technology, collaboration, and Domain-Driven Design. He continually seeks improvement by working on ambitious products and with enthusiastic people.
Summary
Methods for managing complex software construction following the practices, principles and patterns of Domain-Driven Design with code examples in C# This book presents the philosophy of Domain-Driven Design (DDD) in a down-to-earth and practical manner for experienced developers building applications for complex domains.