What problem does it solve? Designing domain models in Domain-Driven Design requires deciding when to use value objects versus entities, where to draw aggregate boundaries, and how to place cross-entity logic in domain services. This Skill provides language-agnostic design guidance with TypeScript examples so you can model your domain correctly from the start. ## Core Features & Use Cases - Value Object Design: Explains identity-free, immutable, self-contained value objects with validation via smart constructors, using a Money class with fp-ts Either-based error handling as the example. - Entity and Aggregate Modeling: Covers identifier-based entities with lifecycles and aggregates as transactional consistency units accessed only through an aggregate root, illustrated with an Order aggregate. - Domain Services: Shows how to implement operations spanning multiple entities, such as a bank account transfer, as domain services or standalone functions named after the ubiquitous language. - Use Case: When building an order management system, use this Skill to decide that Order is an aggregate root enforcing invariants like "no items after confirmation", while Money and Quantity become immutable value objects. ## Quick Start Ask the AI to help you design a value object or aggregate for your domain, for example by saying "Help me design a Money value object and an Order aggregate using DDD principles".