domain-driven-design

Apply Domain-Driven Design patterns to model complex business domains in code.

1|Updated May 21, 2026
One-click install
npx skills add https://github.com/vnovakovits/claude-skills --skill domain-driven-design-vnovakovits
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: domain-driven-design
Source: https://github.com/vnovakovits/claude-skills/tree/main/plugins/engineering-practices/skills/domain-driven-design
Command: npx skills add https://github.com/vnovakovits/claude-skills --skill domain-driven-design-vnovakovits

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Complex business domains produce tangled code when the model in developers' heads diverges from the code they write. This Skill provides the strategic and tactical patterns of Domain-Driven Design (Eric Evans, Vaughn Vernon) so that code, conversations, and documentation express one consistent model. ## Core Features & Use Cases - Strategic Design: Establish ubiquitous language, define bounded contexts, classify core/supporting/generic subdomains, and map context relationships (partnership, anticorruption layer, conformist, and more). - Tactical Building Blocks: Decide between entities and value objects, design small aggregates with explicit invariants, and use domain events, domain services, repositories, and factories correctly. - Supple Design & Refactoring: Apply intention-revealing interfaces, side-effect-free functions, and specifications, and refactor toward deeper insight when the model feels awkward. - Use Case: When designing an order management system, use this Skill to split the system into bounded contexts, model Order as an aggregate root referencing Customer by ID, and coordinate fulfillment through an OrderPlaced domain event. ## Quick Start Ask Claude to review your domain model or design a new module, for example: "Design the aggregates and bounded contexts for a shipping system using DDD."

Frequently Asked Questions about domain-driven-design

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

FAQPage Schema
How do I decide between an entity and a value object in DDD?▼

Choose an entity when identity matters and the object has a lifecycle; choose a value object when only its attributes matter. Value objects are immutable and compared by attribute equality, while entities are compared by ID. Prefer value objects over primitives for domain concepts like Money or Address.

How to design aggregates in Domain-Driven Design?▼

Design small aggregates, each with one aggregate root that enforces true transactional invariants. Reference other aggregates by identity rather than object reference, and update only one aggregate per transaction, using domain events and eventual consistency for cross-aggregate changes.

What is a bounded context in Domain-Driven Design?▼

A bounded context is an explicit boundary within which a particular model and ubiquitous language apply consistently. The same term can mean different things in different contexts, and integration across boundaries requires explicit translation such as an anticorruption layer or a published language.

When should I not use Domain-Driven Design?▼

Avoid DDD when the domain is shallow CRUD over a small data model, the application is a thin database wrapper, the team lacks access to domain experts, or the team is too small to absorb the overhead. Reserve DDD for the core domain where business complexity justifies careful modeling.

Does DDD work with microservices and layered architecture?▼

Yes. DDD assumes a layered architecture where dependencies flow inward and the domain layer depends on nothing technical, and it is compatible with hexagonal, onion, and clean architectures. Bounded contexts often align with teams or deployment units, making them natural microservice boundaries.

Why is an anemic domain model a problem in DDD?▼

An anemic domain model reduces entities to getters and setters while pushing all logic into services, turning the model into a data structure rather than a domain model. Behavior should live on entities and value objects, with domain services reserved for operations spanning multiple objects.