๐ŸŽฏ

m09-domain

๐ŸŽฏSkill

from actionbook/rust-skills

VibeIndex|
What it does

Guides domain modeling in Rust by helping identify entities, value objects, aggregates, and their ownership patterns with domain-driven design principles.

๐Ÿ“ฆ

Part of

actionbook/rust-skills(35 items)

m09-domain

Installation

Quick InstallInstall with npx
npx skills add ZhangHanDong/rust-skills
CargoRun with Cargo (Rust)
cargo install cowork
git cloneClone repository
git clone https://github.com/ZhangHanDong/rust-skills.git
Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add ZhangHanDong/rust-skills
๐Ÿ“– Extracted from docs: actionbook/rust-skills
16Installs
665
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"CRITICAL: Use for domain modeling. Triggers: domain model, DDD, domain-driven design, entity, value object, aggregate, repository pattern, business rules, validation, invariant, ้ข†ๅŸŸๆจกๅž‹, ้ข†ๅŸŸ้ฉฑๅŠจ่ฎพ่ฎก, ไธšๅŠก่ง„ๅˆ™"

Overview

# 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)

  1. What invariants must hold?

- Always valid โ†’ private fields + validated constructor

- Transition rules โ†’ type state pattern

  1. Who owns this data?

- Single owner (parent) โ†’ owned field

- Shared reference โ†’ Arc/Rc

- Weak reference โ†’ Weak

---

Trace Up โ†‘

To domain constraints (Layer 3):

```

"How should I model a Transaction?"

โ†‘ Ask: What domain rules govern transactions?

โ†‘ Check: domain-fintech (audit, precision requirements)

โ†‘ Check: Business stakeholders (what invariants?)

```

| 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):

```

"Model as Entity"

โ†“ m01-ownership: Owned, unique

โ†“ m05-type-driven: Newtype for Id

"Model as Value Object"

โ†“ m01-ownership: Clone/Copy OK

โ†“ m05-type-driven: Validate at construction

"Model as Aggregate"

โ†“ m01-ownership: Parent owns children

โ†“ m02-resource: Consider Rc for shared within aggregate

```

---

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

```rust

struct Email(String);

impl Email {

pub fn new(s: &str) -> Result {

validate_email(s)?;

Ok(Self(s.to_string()))

}

}

```

Entity

```rust

struct UserId(Uuid);

struct User {

id: UserId,

email: Email,

// ... other fields

}

impl PartialEq for User {

fn eq(&self, other: &Self) -> bool {

self.id == other.id // Identity equality

}

}

```

Aggregate

```rust

mod order {

pub struct Order {

id: OrderId,

items: Vec, // Owned children

// ...

}

impl Order {

pub fn add_item(&mut self, item: OrderItem) {

// Enforce aggregate invariants

}

}

}

```

---

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-* |

More from this repository10

๐Ÿช
actionbook-rust-skills๐ŸชMarketplace

Comprehensive Rust development assistant with meta-question routing, coding guidelines, version queries, and ecosystem support

๐ŸŽฏ
coding-guidelines๐ŸŽฏSkill

Provides comprehensive Rust coding guidelines covering naming conventions, best practices, error handling, memory management, concurrency, and code style recommendations.

๐ŸŽฏ
m05-type-driven๐ŸŽฏSkill

Enforces compile-time type safety by preventing invalid states through type-level design techniques like newtypes, type states, and phantom types.

๐ŸŽฏ
rust-refactor-helper๐ŸŽฏSkill

Performs safe Rust refactoring by analyzing symbol references, dependencies, and potential impacts using Language Server Protocol (LSP) operations.

๐ŸŽฏ
m02-resource๐ŸŽฏSkill

Guides developers in selecting the right smart pointer and resource management strategy based on ownership, thread safety, and design constraints.

๐ŸŽฏ
rust-learner๐ŸŽฏSkill

Retrieves and provides comprehensive Rust and crate information, including versions, features, documentation, and changelogs from authoritative sources.

๐ŸŽฏ
m11-ecosystem๐ŸŽฏSkill

Guides Rust developers in selecting, integrating, and managing ecosystem dependencies with best practices and strategic decision-making.

๐ŸŽฏ
rust-trait-explorer๐ŸŽฏSkill

Explores Rust trait implementations, revealing which types implement specific traits and their implementation details using LSP.

๐ŸŽฏ
rust-call-graph๐ŸŽฏSkill

Generates and visualizes Rust function call graphs using LSP, revealing function relationships and call hierarchies.

๐ŸŽฏ
m12-lifecycle๐ŸŽฏSkill

Guides resource lifecycle design by analyzing creation, usage, cleanup strategies, and ownership patterns for efficient and safe resource management in Rust.