- Add date_added to all 950+ skills for complete tracking - Update version to 6.5.0 in package.json and README - Regenerate all indexes and catalog - Sync all generated files Features from merged PR #150: - Stars/Upvotes system for community-driven discovery - Auto-update mechanism via START_APP.bat - Interactive Prompt Builder - Date tracking badges - Smart auto-categorization All skills validated and indexed. Made-with: Cursor
54 lines
1.6 KiB
Markdown
54 lines
1.6 KiB
Markdown
---
|
|
name: ddd-tactical-patterns
|
|
description: "Apply DDD tactical patterns in code using entities, value objects, aggregates, repositories, and domain events with explicit invariants."
|
|
risk: safe
|
|
source: self
|
|
tags: "[ddd, tactical, aggregates, value-objects, domain-events]"
|
|
date_added: "2026-02-27"
|
|
---
|
|
|
|
# DDD Tactical Patterns
|
|
|
|
## Use this skill when
|
|
|
|
- Translating domain rules into code structures.
|
|
- Designing aggregate boundaries and invariants.
|
|
- Refactoring an anemic model into behavior-rich domain objects.
|
|
- Defining repository contracts and domain event boundaries.
|
|
|
|
## Do not use this skill when
|
|
|
|
- You are still defining strategic boundaries.
|
|
- The task is only API documentation or UI layout.
|
|
- Full DDD complexity is not justified.
|
|
|
|
## Instructions
|
|
|
|
1. Identify invariants first and design aggregates around them.
|
|
2. Model immutable value objects for validated concepts.
|
|
3. Keep domain behavior in domain objects, not controllers.
|
|
4. Emit domain events for meaningful state transitions.
|
|
5. Keep repositories at aggregate root boundaries.
|
|
|
|
If detailed checklists are needed, open `references/tactical-checklist.md`.
|
|
|
|
## Example
|
|
|
|
```typescript
|
|
class Order {
|
|
private status: "draft" | "submitted" = "draft";
|
|
|
|
submit(itemsCount: number): void {
|
|
if (itemsCount === 0) throw new Error("Order cannot be submitted empty");
|
|
if (this.status !== "draft") throw new Error("Order already submitted");
|
|
this.status = "submitted";
|
|
}
|
|
}
|
|
```
|
|
|
|
## Limitations
|
|
|
|
- This skill does not define deployment architecture.
|
|
- It does not choose databases or transport protocols.
|
|
- It should be paired with testing patterns for invariant coverage.
|