---
id: gh-domain-modeling
name: "domain-modeling"
url: https://skills.yangsir.net/skill/gh-domain-modeling
author: mattpocock
domain: ai-software-architecture-engineering
tags: ["domain-modeling", "software-architecture", "ubiquitous-language", "architectural-decisions", "glossary"]
install_count: 868700
rating: 4.90 (120 reviews)
github: https://github.com/mattpocock/skills/tree/main/skills/engineering/domain-modeling
---

# domain-modeling

> 此技能旨在帮助开发者主动构建和完善项目的领域模型，明确核心业务术语和通用语言，并及时记录重要的架构决策。通过挑战模糊概念、探讨具体场景和交叉验证代码，它能有效减少团队沟通障碍，提升对业务的理解深度，确保软件设计与业务需求高度一致，从而提高开发效率和项目质量。

**Stats**: 868,700 installs · 4.9/5 (120 reviews)

## Before / After 对比

### 领域模型定义效率

**Before**:

在没有此技能之前，开发者在项目初期或迭代中，常因领域术语不一致、概念模糊不清、架构决策未及时记录而导致团队沟通障碍、理解偏差，甚至返工，严重影响开发效率和项目质量。

**After**:

此技能通过主动构建和完善领域模型，明确通用语言，并及时记录架构决策，显著减少了沟通成本和返工，提升了团队对业务的理解深度和开发效率。

| Metric | Before | After | Change |
|---|---|---|---|
| 概念澄清时间 | 60分钟 | 10分钟 | -83% |

## Readme

# Domain Modeling

Actively build and sharpen the project's domain model as you design. This is the *active* discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)

## File structure

Most repos have a single context:

```
/
├── CONTEXT.md
├── docs/
│   └── adr/
│       ├── 0001-event-sourced-orders.md
│       └── 0002-postgres-for-write-model.md
└── src/
```

If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:

```
/
├── CONTEXT-MAP.md
├── docs/
│   └── adr/                          ← system-wide decisions
├── src/
│   ├── ordering/
│   │   ├── CONTEXT.md
│   │   └── docs/adr/                 ← context-specific decisions
│   └── billing/
│       ├── CONTEXT.md
│       └── docs/adr/
```

Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.

## During the session

### Challenge against the glossary

When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"

### Sharpen fuzzy language

When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."

### Discuss concrete scenarios

When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.

### Cross-reference with code

When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"

### Update CONTEXT.md inline

When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).

`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.

### Offer ADRs sparingly

Only offer to create an ADR when all three are true:

1. **Hard to reverse** — the cost of changing your mind later is meaningful
2. **Surprising without context** — a future reader will wonder "why did they do it this way?"
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons

If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).


---
*Source: https://skills.yangsir.net/skill/gh-domain-modeling*
*Markdown mirror: https://skills.yangsir.net/api/skill/gh-domain-modeling/markdown*