domain-driven-design

Model complex business domains with strategic and tactical Domain-Driven Design patterns.

Updated Apr 6, 2026
One-click install
npx skills add https://github.com/joeblackwaslike/agent-skills --skill domain-driven-design-joeblackwaslike
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: domain-driven-design
Source: https://github.com/joeblackwaslike/agent-skills/tree/main/skills/domain-driven-design
Command: npx skills add https://github.com/joeblackwaslike/agent-skills --skill domain-driven-design-joeblackwaslike

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

Domain-driven design provides a structured approach to modeling complex business domains, keeping the domain logic central, invariants protected, and boundaries clear to prevent leakage of persistence or infrastructure concerns into core behavior.

Core Features & Use Cases

  • Strategic design for context boundaries, ubiquitous language, and bounded contexts to align teams and ensure clear ownership.
  • Tactical patterns including aggregates, entities, value objects, domain events, and repositories to keep business rules in one place.
  • CQRS & event sourcing guidance for when to separate read and write models and how to replay event streams for state reconstruction.
  • Practical examples and patterns across TypeScript and Python to illustrate how domain logic remains framework-agnostic.

Quick Start

Begin by identifying a core business concept, carve it into a bounded context, and implement it as an Order aggregate with invariants and domain events.

Frequently Asked Questions about domain-driven-design

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

FAQPage Schema
What is domain-driven design and when should I use it for software architecture?

Domain-driven design is a structured approach to modeling complex business domains, keeping domain logic central and boundaries clear. Use it when you need to protect invariants and prevent infrastructure concerns from leaking into core business behavior.

How do I model an aggregate with invariants and domain events in TypeScript or Python?

To model an aggregate, define a bounded context for a core business concept, implement it as an aggregate root, enforce invariants inside it, and emit domain events. This keeps business rules framework-agnostic across TypeScript and Python implementations.

How does CQRS with event sourcing separate read and write models?

CQRS separates read and write models to optimize queries and command processing independently. Event sourcing reconstructs aggregate state by replaying event streams, providing an audit log and enabling temporal queries for complex domain logic.

What is the difference between strategic design and tactical patterns in DDD?

Strategic design defines bounded contexts, ubiquitous language, and context boundaries to align team ownership. Tactical patterns include aggregates, entities, value objects, and repositories to encapsulate business rules within those defined boundaries.

Do I need bounded contexts to isolate domain logic from infrastructure concerns?

Yes, bounded contexts isolate domain logic from persistence and infrastructure concerns. Defining clear context boundaries ensures that core business behavior remains framework-agnostic and invariants are protected within specific domain models.

When should I not use domain-driven design for my application architecture?

Avoid domain-driven design for simple CRUD applications or domains lacking complex business rules. DDD introduces strategic and tactical overhead that is unnecessary when invariants are minimal and domain logic does not require bounded context isolation.