domain-driven-design

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

21|4|Updated Oct 24, 2025
One-click install
npx skills add https://github.com/joaquimscosta/arkhe-claude-plugins --skill domain-driven-design-joaquimscosta
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: domain-driven-design
Source: https://github.com/joaquimscosta/arkhe-claude-plugins/tree/main/spring-boot/skills/spring-boot-domain-driven-design
Command: npx skills add https://github.com/joaquimscosta/arkhe-claude-plugins --skill domain-driven-design-joaquimscosta

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

This Skill provides guidance for Domain-Driven Design, including strategic patterns (subdomains, bounded contexts) and tactical patterns (entities, value objects, aggregates) to manage complexity.

Core Features & Use Cases

  • Strategic Design: define bounded contexts and ubiquitous language
  • Tactical Patterns: design aggregates, entities, value objects
  • Architectural Guidance: alignment with modular monolith and microservices

Quick Start

Start with bounded context mapping and define an initial aggregate with a value object.

Frequently Asked Questions about domain-driven-design

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

FAQPage Schema
How do I manage complexity in large domain models with bounded contexts?

Bounded contexts partition your domain into explicit boundaries, each with its own ubiquitous language and model. Define context boundaries first, then design aggregates and entities within each context to enforce invariants and isolate concerns, reducing architectural complexity across your system.

What's the difference between aggregates, entities, and value objects in domain-driven design?

Aggregates are clusters of entities and value objects treated as single units for consistency. Entities have unique identities and lifecycle; value objects represent concepts without identity. This distinction enforces invariant boundaries and persistence ignorance in your domain model.

How do I coordinate changes across multiple aggregates without tight coupling?

Use domain events to communicate state changes between aggregates. Aggregates publish events when invariants change; other aggregates subscribe and react asynchronously, maintaining loose coupling while ensuring consistency across your bounded context or system.

When should I use a modular monolith versus microservices with DDD?

Start with a modular monolith using bounded contexts as modules; this reduces deployment complexity while maintaining clear architectural boundaries. Migrate to microservices only when bounded contexts have distinct scaling, team, or deployment needs that justify the operational overhead.

How do I begin designing bounded contexts for my domain?

Use event storming to map domain processes and identify natural boundaries. Define a ubiquitous language within each context, then start with one aggregate and a value object to establish patterns before expanding to the full model across contexts.

Why does DDD enforce persistence ignorance in aggregate design?

Persistence ignorance keeps domain logic independent of database implementation, allowing aggregates to focus on invariants and business rules. This separation enables domain models to evolve and be tested without coupling to storage technology or ORM frameworks.