m09-domain

CRITICAL: Use for domain modeling. Triggers: domain model, DDD, domain-driven design, entity, value object, aggregate, repository pattern, business rules, validation, invariant, 领域模型, 领域驱动设计, 业务规则

By actionbook · 2,766 installs

npx skills add actionbook/rust-skills --skill m09-domain

Source repository · Upstream listing

Domain Modeling Layer 2: Design Choices Core Question What is this concept's role in the domain? Before modeling in code, understand: Is it an Entity (identity matters) or Value Object (interchangeable)? What invariants must be maintained? Where are the aggregate boundaries? Domain Concept → Rust Pattern Domain Concept Rust Pattern Ownership Implication Entity struct + Id Owned, unique identity Value Object struct + Clone/Copy Shareable, immutable Aggregate Root struct owns children Clear ownership tree Repository trait Abstracts persistence Domain Event enum Captures state changes Service impl block / free fn Stateless operations Thinking Prompt Before creating a domain type: 1. What's the concept's identity? Needs unique identity → Entity (Id field) Interchangeable by value → Value Object (Clone/Copy) 2. What invariants must hold? Always valid → private fields + validated constructor Transition rules → type state pattern 3. Who owns this data? Single owner (parent) → owned field Shared reference → Arc/Rc Weak reference → Weak Trace Up ↑ To domain constraints (Layer 3): Design Question Trace To Ask Entity vs Value Object domain What makes two instances "the same"? Aggregate boundaries domain What must be consistent together? Validation rules domain What business rules apply? Trace Down ↓ To implementation (Layer 1): Quick Reference DDD Concept Rust Pattern Example Value Object Newtype struct Email(String); Entity Struct + ID struct User { id: UserId, ... } Aggregate Module boundary mod order { ... } Repository Trait trait UserRepo { fn find(...) } Domain Event Enum enum OrderEvent { Created, ... } Pattern Templates Value Object Entity Aggregate Common Mistakes Mistake Why Wrong Better Primitive obsession No type safety Newtype wrappers Public fields with invariants Invariants violated Private + accessor Leaked aggregate internals Broken encapsulation Methods on root String for semantic types No validation Validated newtype Related Skills When See Type driven implementation m05 type driven Ownership for aggregates m01 ownership Domain error handling m13 domain error Specific domain rules domain