ddd

Apply Domain-Driven Design patterns to model aggregates and bounded contexts.

1|Updated Mar 17, 2026
One-click install
npx skills add https://github.com/iceflower/agent-skills --skill ddd-iceflower
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: ddd
Source: https://github.com/iceflower/agent-skills/tree/main/ddd
Command: npx skills add https://github.com/iceflower/agent-skills --skill ddd-iceflower

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

Domain-Driven Design patterns provide a structured approach to modeling complex business domains, aligning software with domain knowledge using entities, value objects, aggregates, repositories, domain services, domain events, and bounded contexts.

Core Features & Use Cases

  • Value Objects, Entities, and Domain Services to model core domain concepts
  • Aggregates, Repositories, and Factories to maintain invariants and persistence boundaries
  • Domain Events and Application Services to coordinate behavior across contexts
  • Bounded Contexts and Ubiquitous Language to manage complexity in large systems

Quick Start

Define a simple Order-like aggregate, establish invariants, and map bounded contexts to demonstrate end-to-end domain modeling.

Frequently Asked Questions about ddd

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I model aggregates and enforce invariants in domain-driven design?

To model aggregates in domain-driven design, you group entities and value objects under an aggregate root, which enforces invariants and transactional boundaries. This ensures consistency within the aggregate while exposing controlled access to internal components.

What is the best way to handle communication between bounded contexts?

The best way to handle communication between bounded contexts is through domain events. Domain events support eventual consistency by allowing aggregates in separate contexts to react to state changes asynchronously without tight coupling.

How do I distinguish between entities and value objects when shaping a domain model?

Entities possess a distinct identity that persists over time, while value objects are defined solely by their attribute values. Shaping a domain model requires using entities for lifecycle tracking and value objects for descriptive, immutable concepts.

When should I use domain services instead of application services in complex business domains?

Use domain services for complex business domains when logic does not naturally fit within a single entity or value object. Application services coordinate use cases, manage repositories, and orchestrate domain objects without containing business rules.

Does domain-driven design work for systems with evolving requirements and multiple aggregates?

Domain-driven design is specifically structured for systems with evolving requirements and multiple aggregates. It uses bounded contexts and ubiquitous language to manage complexity, ensuring the software architecture adapts to changing business rules.

Why use repositories and factories when defining persistence boundaries in DDD?

Repositories and factories define persistence boundaries in DDD by abstracting data access and object creation. Repositories provide collection-like access to aggregates, while factories encapsulate complex instantiation to maintain valid state.