Implementing Domain-Driven Design : 9780321834577

Implementing Domain-Driven Design

 
Edition
 
1
ISBN
 
9780321834577
ISBN 10
 
0321834577
Published
 
22/05/2013
Published by
 
Pearson Higher Ed USA
Pages
 
656
Format
 
Out of stock
 
Title type
Book
$88.99
 
 
Title type
 
$65.99
 
 
Table of contents
 

Foreword         xvii

Preface          xix

Acknowledgments         xxix

About the Author          xxxiii

Guide to This Book           xxxv

 

Chapter 1: Getting Started with DDD          1

Can I DDD?    2

Why You Should Do DDD    6

How to Do DDD    20

The Business Value of Using DDD    25

The Challenges of Applying DDD    29

Fiction, with Bucketfuls of Reality    38

Wrap-Up    41

 

Chapter 2: Domains, Subdomains, and Bounded Contexts         43

Big Picture   43

Why Strategic Design Is So Incredibly Essential    53

Real-World Domains and Subdomains    56

Making Sense of Bounded Contexts    62

Sample Contexts    72

Wrap-Up    84

 

Chapter 3: Context Maps    87

Why Context Maps Are So Essential    87

Wrap-Up    111

 

Chapter 4: Architecture          113

Interviewing the Successful CIO    114

Layers   119

Hexagonal or Ports and Adapters    125

Service-Oriented    130

Representational State Transfer–REST    133

Command-Query Responsibility Segregation, or CQRS    138

Event-Driven Architecture    147

Data Fabric and Grid-Based Distributed Computing    163

Wrap-Up    168

 

Chapter 5: Entities          171

Why We Use Entities    171

Unique Identity    173

Discovering Entities and Their Intrinsic Characteristics    191

Wrap-Up    217

 

Chapter 6: Value Objects           219

Value Characteristics    221

Integrate with Minimalism    232

Standard Types Expressed as Values    234

Testing Value Objects    239

Implementation   243

Persisting Value Objects    248

Wrap-Up    263

 

Chapter 7: Services           265

What a Domain Service Is (but First, What It Is Not)    267

Make Sure You Need a Service    268

Modeling a Service in the Domain    272

Testing Services   281

Wrap-Up    284

 

Chapter 8: Domain Events           285

The When and Why of Domain Events    285

Modeling Events    288

Publishing Events from the Domain Model    296

Spreading the News to Remote Bounded Contexts    303

Event Store    307

Architectural Styles for Forwarding Stored Events    312

Implementation    318

Wrap-Up    331

 

Chapter 9: Modules          333

Designing with Modules    333

Basic Module Naming Conventions    336

Module Naming Conventions for the Model    337

Modules of the Agile Project Management Context   340

Modules in Other Layers    343

Module before Bounded Context    344

Wrap-Up    345

 

Chapter 10: Aggregates          347

Using Aggregates in the Scrum Core Domain    348

Rule: Model True Invariants in Consistency Boundaries    353

Rule: Design Small Aggregates    355

Rule: Reference Other Aggregates by Identity    359

Rule: Use Eventual Consistency Outside the Boundary    364

Reasons to Break the Rules    367

Gaining Insight through Discovery   370

Implementation    380

Wrap-Up   388

 

Chapter 11: Factories          389

Factories in the Domain Model    389

Factory Method on Aggregate Root    391

Factory on Service   397

Wrap-Up    400

 

Chapter 12: Repositories          401

Collection-Oriented Repositories    402

Persistence-Oriented Repositories    418

Additional Behavior    430

Managing Transactions   432

Type Hierarchies    437

Repository versus Data Access Object    440

Testing Repositories    441

Wrap-Up    448

 

Chapter 13: Integrating Bounded Contexts            449

Integration Basics    450

Integration Using RESTful Resources          458

Integration Using Messaging    469

Wrap-Up   508

 

Chapter 14: Application           509

User Interface     512

Application Services    521

Composing Multiple Bounded Contexts    531

Infrastructure    532

Enterprise Component Containers    534

Wrap-Up    537

 

Appendix A: Aggregates and Event Sourcing: A+ES   539

Inside an Application Service    541

Command Handlers    549

Lambda Syntax    553

Concurrency Control    554

Structural Freedom with A+ES    558

Performance    558

Implementing an Event Store    561

Relational Persistence    565

BLOB Persistence    568

Focused Aggregates    569

Read Model Projections    570

Use with Aggregate Design   573

Events Enrichment     573

Supporting Tools and Patterns     576

Contract Generation    580

Unit Testing and Specifications    582

Event Sourcing in Functional Languages    583

 

Bibliography           585

Index           589

 

Author biography
Vaughn Vernon is a veteran software craftsman with more than twenty-five years of experience in software design, development, and architecture. He is a thought leader in simplifying software design and implementation using innovative methods. He has been programming with object-oriented languages since the 1980s, and applying the tenets of Domain-Driven Design since his Smalltalk domain modeling days in the early 1990s. He consults and speaks internationally, and has taught his Implementing Domain-Driven Design classes on multiple continents.