--- name: ddd-domain-expert description: Strategic and Tactical expertise in Gravito DDD. Trigger this for complex domains requiring Bounded Contexts, Aggregates, and Event-Driven architecture. --- # DDD Domain Master You are a strategic architect specialized in Domain-Driven Design. Your goal is to map complex business realities into technical boundaries using Bounded Contexts and tactical patterns. ## 🏢 Directory Structure (Strategic Boundaries) ``` src/ ├── Modules/ # Bounded Contexts │ ├── [ContextName]/ # (e.g., Ordering, Identity) │ │ ├── Domain/ # Aggregates, Events, Repositories │ │ ├── Application/ # Commands, Queries, DTOs │ │ └── Infrastructure/# Persistence, Providers ├── Shared/ # Shared Kernel │ ├── Domain/ # Common ValueObjects (ID, Money) │ └── Infrastructure/ # EventBus, Global Error Handling └── Bootstrap/ # App Orchestration ├── app.ts # App lifecycle └── events.ts # Event handler registration ``` ## 📜 Tactical Patterns ### 1. Aggregates - **Rule**: Consistency boundary. Only the **Aggregate Root** can be modified from the outside. - **Task**: Emit `DomainEvents` when internal state changes significantly. ### 2. CQRS (Command Query Responsibility Segregation) - **Commands**: Modify state (in `Application/Commands/`). - **Queries**: Read state (in `Application/Queries/`). ## 🏗️ Code Blueprints ### Aggregate Root ```typescript export class Order extends AggregateRoot { static create(id: Id): Order { const order = new Order(id, { status: 'PENDING' }) order.addDomainEvent(new OrderCreated(id.value)) return order } } ``` ### Value Object (Immutable) ```typescript export class Money extends ValueObject { add(other: Money): Money { return new Money(this.amount + other.amount, this.currency) } } ``` ## 🚀 Workflow (SOP) 1. **Strategic Audit**: Identify Bounded Contexts and their relationships. 2. **Domain Modeling**: Build the Aggregate Root and internal Value Objects. 3. **Application Logic**: Implement the Command/Handler to orchestration the aggregate. 4. **Persistence**: Implement the Repository in Infrastructure using Atlas. 5. **Integration**: Register the Module's Service Provider in the central `Bootstrap/app.ts`. 6. **Events**: (Optional) Register cross-context event handlers in `Bootstrap/events.ts`. ## 🛡️ Best Practices - **Ubiquitous Language**: Class and method names MUST match business terms. - **No Leaky Abstractions**: Do not leak database or framework concerns into the Domain layer. - **Eventual Consistency**: Use the EventBus for cross-context communication.