Index

A

Abstractions

modeling Aggregates, 9395

software design problems, 5

Acceleration and management tools

Event Storming, 112124

managing DDD projects. See Managing DDD on Agile Project

other tools, 124

overview of, 111112

summary, 136

Acceptance tests

implementing DDD on Agile Project, 134

using with Event Storming, 124

validating domain model, 3940

Accuracy, managing in project, 130131

Actor model

caching Aggregates' state, 109

handling transactions, 78

using with DDD, 43

Adapters, 4142

Aggregate Root, defined, 77

Aggregates

associating with Commands, 120122

choosing abstractions carefully, 9395

creating Big Ball of Mud via, 59

designing as testable units, 9798

Domain Experts refining, 134136

Event Sourcing Domain Events for, 107109

identifying tasks/estimating effort, 129131

integrating using messaging, 6570

modeling, 8893

overview, 75

right-sizing, 9597

scenario using, 104105

summary, 98

in tactical design, 89

transactions and, 7881

why they are used, 7678

Aggregates, design rules

commit one instance in one transaction, 7981

protect business invariants within boundaries, 82

reference by identity only, 8485

small size, 8384

update with eventual consistency, 8588

Agile Project Management Context

and Context Mapping, 52

modeling abstractions for Aggregates, 935

moving concepts to other Bounded Contexts, 51

Anemic Domain Model, avoiding in Aggregates, 8889 , 92

Anticorruption Layer

Context Mapping, 5657

integrating with Big Ball of Mud via, 60

in Open Host Service, 57

RPC with SOAP using, 62

Application Services

Bounded Contexts architecture, 42

modeling Aggregates, 89

Architecture, Bounded Contexts, 4143

Arrowheads, in Event Storming, 123

Asynchronous messaging, 6570

At-Least-Once Delivery, messaging pattern, 6869

Atomic database transactions, 7879

B

Bad design, in software development, 37

Behavior-Driven Development (BDD), Ubiquitous Language, 39

Big Ball of Mud

case study, 2124

Context Mapping and, 5960

turning new software into, 17

using business experts to avoid, 1820

using Subdomains for legacy systems, 4849

Big-picture Event Storming, 114

Black marker pens, for Event Storming, 115 , 122123

Book Design: A Practical Introduction (Martin), 56

Boundaries, Aggregate

design steps for right-sizing, 9597

protecting business invariants within, 82

transactional consistency and, 7881

Bounded Contexts

aligning with single Subdomain, 4950

architectural components of, 4143

case study, 2124

drawing boundaries in Event Storming, 122124

Context Mapping between. See Context Mapping

as fundamental strategic design tool, 2529

modeling business policies into separate, 20

showing flow on modeling surface in Event Storming, 122123

in strategic design, 78

Subdomains in. See Subdomains

in tactical design, 9

teams and source code repositories for, 14

understanding, 1114

Brandolini, Alberto, 112113

Business

Aggregate boundaries protecting invariants of, 82 , 9596

Domain Expert focus on, 1720 , 2729

Event Storming focus on, 113

Event Storming process via Domain Events, 116118

eventual consistency driven by, 97

focus on complexity of, 29

leaking logic when modeling Aggregates, 89

software design vs. purposes of, 45

Subdomains within domains of, 46

unit testing vs. validating specifications for, 9798

C

Caching, Aggregate performance, 109

Causal consistency, Domain Events for, 99100

Challenge, 29

Claims, 1920 , 7073

Classes, 9094

Collaboration Context

challenging/unifying mental models, 33

and Context Mapping, 52

Command Message, 67

Command Query Responsibility Segregation (CQRS), 43 , 109

Commands, Event Storming

associate Entity/Aggregate to, 120122

causing Domain Events, 118120

Domain Events vs., 107

identifying tasks/estimating effort, 129131

using Domain Experts to refine, 134136

Complex behavior, modeling Aggregates, 93

Complexity, Domain-Driven Design reducing, 23

Conformist

Context Mapping, 56

Domain Event consumers and, 67

in Open Host Service, 57

RESTful HTTP mistakes and, 64

Context Mapping

defined, 52

example in, 7073

making good use of, 6061

overview of, 5153

in problem space, 12

strategic design with, 8

summary, 73

using messaging, 6570

using RESTful HTTP, 6365

using RPC with SOAP, 6163

Context Mapping, types of

Anticorruption Layer, 5657

Big Ball of Mud, 5960

Conformist, 56

Customer-Supplier, 5556

Open Host Service, 57

Partnership, 54

Published Language, 58

Separate Ways, 58

Shared Kernel, 55

Core concepts

Bounded Contexts for, 2526

case study, 2124

Core Domain

challenging/unifying mental models to create, 2934

and Context Mapping, 52

dealing with complexity, 4750

defined, 12

developing Ubiquitous Language, 3441

Event Sourcing saving record of occurrences in, 109

Event Storming to understand, 113114

solution space implementing, 12

as type of Subdomain within project, 4647

Ubiquitous Language maintenance vs., 41

understanding, 13

Cost

Event Storming advantages, 113

false economy of no design, 5

software design vs. affordable, 45

Could computing, using with DDD, 43

Coupled services, software design vs. strongly, 5

CQRS (Command Query Responsibility Segregation), 43 , 109

Customer-Supplier Context Mapping, 5556

D

Database

atomic transactions, 7879

software design and, 45

DDD (Domain-Driven Design)

complexity of, 23

good, bad and effective design, 37

learning process and refining knowledge, 910

managing. See Managing DDD on Agile Project

overview of, 12

strategic design, 78

tactical design, 89

DELETE operation, RESTful HTTP, 6365

Design-level modeling, Event Storming, 114

Diagrams, 36

Domain Events

Context Mapping example, 7073

creating interface, 101

enriching with additional data, 104

Event Sourcing and, 107109

going asynchronous with REST, 65

in messaging, 6570

naming types of, 101102

properties, 103104

scenario using, 104107

summary, 109110

in tactical design, 9 , 99100

Domain Events, Event Storming

associate Entity/Aggregate to Command, 120122

create Commands causing, 118120

creating for business process, 116118

identifying tasks/estimating effort, 129131

identifying views/roles for users, 123124

showing flow on modeling surface, 122123

using Domain Experts to refine, 134136

Domain Experts

business drivers and, 1720

developing Ubiquitous Language as scenarios, 3541

focus on business complexity, 28

identifying core concepts, 2629

implementing DDD on Agile Project, 133134

interacting with, 134136

modeling abstractions for Aggregates, 9395

for one or more Subdomains, 46

in rapid design. See Event Storming

right-sizing Aggregates, 9596

Scrum, 27

in strategic design, 78

E

Effective design, 67

Effort, estimating for Agile Project, 129131

Enrichment, Domain Event, 7172

Entities

Aggregates composed of, 77

associating with Commands, 120122

defined, 76

implementing Aggregate design, 9091

right-sizing Aggregates, 95

Value Objects describing/quantifying, 77

Estimates

managing tasks in Agile Project, 129131

timeboxed modeling of tasks via, 132134

Event-driven architecture, with DDD, 42 , 112113

Event Sourcing

in atomic database transactions, 7879

overlap between Event Storming and, 121122

persisting Domain Events for Aggregates, 107109

Event Storming

advantages of, 113114

associate Entity/Aggregate to Command, 120122

Commands causing Domain Events, 118120

concrete scenarios, 35

Domain Events for business process, 116118

Domain Experts for, 134

event-driven modeling vs., 112113

identify tasks/estimate effort, 129131

identify views/roles for users, 123124

implement DDD on Agile Project, 133134

modeling spikes on DDD projects via, 129

other tools used with, 124

show flow on modeling surface, 122123

supplies needed for, 115116

Events, in Event Storming, 113 , 115

Eventual consistency

right-sizing Aggregates, 97

updating Aggregates, 8588

working with, 88

working with scenarios, 38

F

Functional programming, modeling Aggregates, 89

G

Generic Subdomain, 47

GET operation

Context Mapping example, 72

integration using RESTful HTTP, 6365

Globally unique identity, Aggregate design, 9091

Good design, software development, 37

I

IDDD Workshop, 3

Idempotent Receiver, messaging, 68

Impact Mapping, 124

Implementing Domain-Driven Design ( IDDD), Vaughn, 1 , 3

Input Adapters, Bounded Contexts architecture, 42

Inspections policy, 1920

Iterations

accuracy of long-term estimates for, 131

identifying tasks/estimating effort, 130

implementing DDD on Agile Project, 134

incurring modeling debt during, 128129

as sprints, 126

K

Knowledge, 910

Knowledge acquisition, 45 , 6

L

Language

evolution of terminology in human, 15

Ubiquitous. See Ubiquitous Language

Latency

in message exchange, 65

RESTful HTTP failures due to, 64

Learning process, refining knowledge in, 910

Legacy systems, using Subdomains with, 4750

M

Maintenance phase, Ubiquitous Language, 4041

Managing DDD on Agile Project

accuracy and, 130131

Event Storming, 112124

hiring good people, 126

how to implement, 133134

identifying tasks/estimating effort, 129131

interacting with Domain Experts, 134136

modeling spikes/debt, 128129

other tools, 124

overview of, 125126

summary, 136

timeboxed modeling, 132134

using SWOT analysis, 127128

Martin, Douglas, 56

Memory footprint, designing small Aggregates, 83

Messaging, 6570

Metrics-based approach, identify tasks/estimate effort, 129131

Microservices, using with DDD, 43

Modeling

debt and spikes on DDD projects, 128129

development of roads and, 6

overview of, 1

Modules, segregating Subdomains into, 50

N

Naming

of Aggregates, 9192

of Domain Event types, 101102

Domain Experts refining Aggregate, 134136

Root Entity of Aggregate, 78

Network providers, RESTful HTTP failures due to, 64

No Design, false economy of, 5

No Estimates approach, 125

Nouns, in Ubiquitous Language, 3436

O

Object-oriented programming, Aggregates, 8889 , 9192

Open Host Service

consuming Published Language, 58

Context Mapping, 57

RESTful HTTP using, 63

RPC with SOAP using, 62

Opportunities, identifying Agile Project, 127128

Output Adapters, Bounded Contexts architecture, 42

P

Paper, conducting Event Storming on, 115116

Parallel processing, Event Storming of business process, 117

Partnership Context Mapping, 54

Performance, caching and snapshots for, 109

Persistence operations, software design vs., 5

Persistence store, Aggregates by identity for, 85

Pictures, in domain model development, 36

Policies

business group, 1820

Context Mapping example of, 7073

segregating into Bounded Contexts, 20

Ports, using with DDD, 4142

POST operation, RESTful HTTP, 6365

Problem space

Bounded Contexts in, 12

Event Storming advantages for, 114

overview of, 12

using Subdomains for discussing, 47

Process, Event Storming of business, 117

Product owner, Scrum, 27 , 119

Properties, Domain Event, 103104

Published Language

in Context Mapping, 58

integrating bounded contexts via, 67

RESTful HTTP using, 63

RPC with SOAP using, 62

PUT operation, RESTful HTTP, 6365

Q

Query-back trade-offs, Domain Events, 7172

R

Rapid design. See Event Storming

Reactive Model, using with DDD, 43

Reference by identity only, Aggregates, 8485

References, used in this book, 137138

Remote Procedure Calls (RPC) with SOAP, 6163

Representational State Transfer (REST), 43 , 65

Request-Response communications, messaging, 6970

REST in Practice (RIP), 6365

REST (Representational State Transfer), 43 , 65

RESTful HTTP, 6365 , 72

Roads, modeling of, 6

Robustness, RPC lacking, 62

Roles, identifying for users in Event Storming, 123124

Root Entity, Aggregate

defined, 78

implementing Aggregate design, 9091

right-sizing, 95

RPC (Remote Procedure Calls) with SOAP, 6163

S

Scenarios

developing Ubiquitous Language as, 3538

implementing DDD on Agile Project, 133134

include Domain Experts in, 134136

putting to work, 3840

Scrum

criticisms of, 125126

DDD Domain Expert vs. product owner in, 27

good, bad and effective design in, 37

managing project. See Managing DDD on Agile Project

Semantic contextual boundaries, Bounded Contexts, 12

Separate Ways Context Mapping, 58

Service-Oriented Architecture (SOA), 43

Services, Open Host Service, 57

Shared Kernel Context Mapping, 55

Simple Object Access Protocol (SOAP), using RPC with, 6163

Single Responsibility Principle (SRP), Aggregates, 84

Size. See Boundaries, Aggregate

Snapshots, of Aggregate performance, 109

SOA (Service-Oriented Architecture), 43

SOAP (Simple Object Access Protocol), using RPC with, 6163

Software developers

developing Ubiquitous Language as scenarios, 3541

Domain Experts vs., 2629

finding good, 126

rapid design for. See Event Storming

Solution space

Bounded Contexts used in, 12

overview of, 12

segregating Subdomain in, 50

Source code repositories, for Bounded Contexts, 14

Specification (Adzic), 124

Specification by Example, refining Ubiquitous Language, 39

Sprints

accuracy of long-term estimates for, 131

identifying tasks/estimating effort, 130

incurring modeling debt during, 128129

SRP (Single Responsibility Principle), Aggregates, 84

Stakeholders, software design vs., 45

Sticky notes, Event Storming

associate Entity/Aggregate to Command, 121122

create Commands causing Domain Events, 118120

defined, 113

Domain Events for business process, 116117

identifying roles for users, 124

overview of, 115116

showing flow on modeling surface, 123

Storage, referencing Aggregates by identity for, 85

Strategic design

architectural components, 4143

Bounded Contexts in, 1117

case study, 2124

challenging assumptions/unifying mental models, 2934

with Context Mapping. See Context Mapping

Domain Experts and business drivers in, 1720

focus on business complexity, 28

fundamental need for, 2529

with Subdomains. See Subdomains

summary, 43

Ubiquitous Language in, 1117 , 3441

understanding, 78

Strengths, identifying Agile Project, 127128

Subdomains

for complexity, 4750

overview of, 4546

showing flow in Event Storming, 122123

strategic design with, 78

summary, 50

types of, 4647

understanding, 46

Supplies, for Event Storming, 115116

Supporting Domain, 47 , 50

SWOT (Strengths, Weaknesses, Opportunities, and Threats) analysis, Agile Projects, 127128

T

Tactical design

with Aggregates. See Aggregates

with Domain Events. See Domain Events

understanding, 89

Taskboard shuffle

project estimates/use of, 5

software design vs., 34

tendency to design using, 126

Tasks

identifying/estimating in Agile Project, 129131

timeboxed modeling of, 132133

Teams

assigning to each Bounded Context, 14

Conformist relationship between, 56

Context Mapping integrating, 53

Customer-Supplier relationship between, 5556

Event Storming advantages for, 113114

Partnership relationship between, 54

Shared Kernel relationship between, 55

Ubiquitous Language spoken within, 1314

Technology

Context Mapping integrating, 53

keeping domain model free of, 42

modeling Aggregates, 90

software design vs., 45

Testing

as benefit of Bounded Contexts, 25

designing Aggregrates for, 9798

implementing DDD on Agile Project, 134

using Domain Experts in, 136

validating domain model, 3940

Threats, identifying Agile Project, 127128

Timeline control, Scrum for, 45

Transactional consistency boundary, Aggregates, 7881

Transactions, Aggregates, 7881 , 8384

U

Ubiquitous Language

advantages of Event Storming, 113

in Anticorruption Layer Context Mapping relationship, 5657

challenging/unifying mental models to create, 2934

in Conformist Context Mapping relationship, 56

for Core Domain, 4647

developing, 3441

developing by collaborative feedback loop, 29

as fundamental strategic design tool, 2529

maintenance phase of, 4041

modeling abstractions for Aggregates, 9395

modeling Aggregates, 93

naming Domain Event types, 101102

in strategic design, 7

understanding, 11 , 1314

using Domain Experts to refine, 134136

Ubiquitous Languages

integrating different, 53

Separate Ways Context Mapping and, 58

translating with Published Languages, 58

UML (Unified Modeling Language), 90 , 112113

Unbounded legacy systems, complexity of, 48

Underwriting, Context Mapping example, 7073

Underwriting policy, 1920

Unit testing, 40 , 9798

Updates, Aggregate, 8588 , 9697

User interface, abstractions for Aggregates, 94

User role, Event Storming, 119

User Story Mapping, Event Storming, 124

User Story Mapping (Patton), 124

V

Value Objects, and Aggregates, 77 , 91

Views, for users in Event Storming, 123124

W

Wall, conducting Event Storming on, 115

Weaknesses, identifying Agile Project, 127128

Whack-a-mole issues, Big Ball of Mud, 59

Who? in Ubiquitous Language development, 3638

Work in progress (WIP)

accuracy of long-term estimates for, 131

identifying tasks/estimating effort, 130

incurring modeling debt during, 128129

sprints as, 126