Skip to content
Back to skills

Ddd Evans 2003

ASecurity

Domain-Driven Design methodology using bounded contexts, ubiquitous language, and strategic/tactical patterns

  • 10 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 11, 2026
code-qualitygorefactoringgitapidatabaseperformance

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add curiositech/windags-skills --skill ddd-evans-2003 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ddd Evans 2003?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ddd Evans 2003
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/curiositech-ddd-evans-2003/badge)](https://www.skillsdirectory.com/skills/curiositech-ddd-evans-2003)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
license: Apache-2.0
name: ddd-evans-2003
description: Domain-Driven Design methodology using bounded contexts, ubiquitous language, and strategic/tactical patterns
category: Research & Academic
tags:
  - domain-driven-design
  - ddd
  - software-architecture
  - bounded-contexts
  - ubiquitous-language
---

# Domain-Driven Design (Eric Evans)

Strategic and tactical patterns for building software systems that remain aligned with business reality as complexity grows.

## Decision Points

### Language & Naming Conflicts
```
Is the same word used differently across teams/systems?
├── Yes → Explicit Bounded Context boundary needed
│   ├── Teams can coordinate? → Shared Kernel or Customer/Supplier
│   └── Teams independent? → Anti-Corruption Layer
└── No → Can use single Ubiquitous Language
    ├── Code names ≠ domain expert names? → Rename code to match domain
    └── Names match → Continue with current language
```

### Object Identity & Boundaries
```
Does the business care which specific instance this is?
├── Yes → Entity
│   ├── Multiple entities modified together for consistency? → Same Aggregate
│   └── Independent lifecycle? → Separate Aggregates  
└── No → Value Object
    ├── Immutable attributes only? → Pure Value Object
    └── Contains behavior? → Value Object with methods
```

### Strategic Investment
```
Is this subdomain where we create competitive advantage?
├── Yes → Core Domain
│   ├── Complex business rules? → Deep modeling with tactical patterns
│   └── Simple CRUD? → May not be truly Core
└── No → Generic/Supporting Subdomain
    ├── Commodity problem? → Buy or use off-shelf solution
    └── Organization-specific? → Minimal custom solution
```

## Failure Modes

### **Anemic Domain Model**
- **Symptom:** Business logic lives in service classes; domain objects are property bags with getters/setters
- **Diagnosis:** Conflating domain objects with data transfer objects; OOP structure without OOP behavior
- **Fix:** Move business rules into domain objects; make services coordinate entities, not contain business logic

### **Translation Tunnel**
- **Symptom:** Same concept has different names at every layer (database: CUST_REC, ORM: CustomerRecord, domain: Client)
- **Diagnosis:** Each layer "protecting" itself with its own vocabulary instead of using Ubiquitous Language
- **Fix:** Use domain terms consistently from UI to database; eliminate gratuitous translation layers

### **God Aggregate**
- **Symptom:** Aggregates requiring joins across 10+ tables; concurrent modification failures; slow loading
- **Diagnosis:** Conflating "what user sees together" with "what must change together for consistency"
- **Fix:** Split aggregates by true consistency boundaries; use eventual consistency between aggregates

### **Shallow Metaphor Lock-in**
- **Symptom:** Model works for obvious cases but fights every edge case; constant special-case handling
- **Diagnosis:** Surface metaphor captured initial understanding but doesn't reflect how domain actually works
- **Fix:** Look for breakthrough refactoring; the model is missing a core concept that would unlock complexity

### **One Model Delusion**
- **Symptom:** Permanent committee meetings to agree on shared terms; integration constantly breaks; forced compromises
- **Diagnosis:** Attempting single canonical model across contexts with legitimately different needs
- **Fix:** Draw explicit bounded context boundaries; choose integration patterns (ACL, Conformist, etc.)

## Worked Examples

### E-Commerce Context Splitting
**Scenario:** Single "Product" concept causing integration pain between catalog and inventory teams.

**Analysis Walk-through:**
1. **Identify the conflict:** Catalog team needs rich attributes (descriptions, categories, SEO); Inventory team needs quantities, locations, reservations
2. **Map current usage:** Same `Product` class being modified by both teams for different reasons
3. **Decision point:** Is this one concept or two? Business says "it's the same product" but they mean different things
4. **Context boundary:** Catalog Context (ProductDetails) vs Inventory Context (StockItem)
5. **Integration choice:** Customer/Supplier relationship - Inventory subscribes to catalog events for new products

**Expert insight:** Novice focuses on avoiding duplication; expert focuses on model integrity within each context.

### Payment Processing Aggregate Design
**Scenario:** Designing order processing where payment, shipping, and inventory must stay consistent.

**Analysis Walk-through:**
1. **Identity question:** Does business care about specific Order instance? Yes → Entity
2. **Consistency boundary:** Payment + OrderLines must change together (inventory reserved when payment succeeds)
3. **Aggregate scope:** Order (root) + OrderLines + Payment attempt, but NOT inventory records (different lifecycle)
4. **Repository design:** OrderRepository loads entire aggregate; InventoryService handles stock via domain events
5. **Concurrency:** Optimistic locking on Order aggregate; inventory conflicts handled via compensating actions

**Expert insight:** Novice includes everything "related"; expert includes only what needs transactional consistency.

## Quality Gates

- [ ] **Language audit:** Same terms used by domain experts appear in code identically
- [ ] **Context map exists:** Explicit boundaries drawn between models with integration strategies defined
- [ ] **Aggregate boundaries validated:** Each aggregate has single reason to change; no cross-aggregate transactions
- [ ] **Entity/Value classification clear:** Each object's identity semantics match business requirements
- [ ] **Strategic allocation verified:** Core Domain gets deep modeling; Generic Subdomains get minimal custom code
- [ ] **Supple design test:** Adding common new features requires changing <3 classes
- [ ] **Anti-corruption barriers:** External systems don't leak their models into our domain
- [ ] **Repository isolation:** Domain layer has zero infrastructure dependencies
- [ ] **Ubiquitous language consistency:** Technical team can explain features using domain expert vocabulary
- [ ] **Invariants in code:** Business rules enforced by object structure, not developer discipline

## NOT-FOR Boundaries

**Don't use DDD for:**
- Pure technical problems (performance optimization, algorithms, infrastructure)
- Simple CRUD applications without complex business rules
- Systems where domain model is not the primary complexity

**Delegate to other skills:**
- **For data modeling without behavior** → use relational-database-design
- **For API integration patterns** → use api-design-patterns  
- **For event-driven architecture** → use event-sourcing-cqrs
- **For microservice boundaries** → use service-decomposition-patterns
- **For performance optimization** → use system-performance-optimization

**Context boundaries:**
- Apply full DDD tactical patterns only in Core Domain
- Use lightweight approaches for Supporting/Generic subdomains
- Don't force single model across organizational boundaries

Files in this skill

  • SKILL.md7 KB
  • _book_identity.json3.3 KB
  • provenance.json1.3 KB
  • references/bounded-contexts-and-strategic-design.md18.7 KB
  • references/building-blocks-entities-values-aggregates.md14.1 KB
  • references/deep-models-and-breakthrough-refactoring.md17.1 KB
  • references/factories-repositories-and-lifecycle-management.md12.6 KB
  • references/knowledge-crunching-and-collaborative-modeling.md3.4 KB
  • references/services-modules-and-layered-architecture.md14.3 KB
  • references/supple-design-patterns.md17.6 KB
  • references/ubiquitous-language-and-model-driven-design.md11.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…