domain-impact-analysis
Skill1 starsChanged 8 days agoMITView on GitHub
定义期第 2 步,领域影响与顶层设计:从需求与不变式出发,按 DDD 分出重点、次要、连带领域,判要不要新领域,在全局做最粗粒度的设计作总边界。不变式清单定好,或人说「影响哪些领域」「要不要新领域」「先画个大边界」时加载。只在一个领域内部改实现不加载。
In this repository28 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- candid-friendSkill
- cleanupSkill
- clear-writingSkill
- context-packSkill
- delegate-briefSkill
- detailed-domain-designSkill
- formal-docs-landingSkill
- formal-guardSkill
- one-lesson-ruleSkill
- pass-the-batonSkill
- pqw-modeSkill
- progress-artifactsSkill
- requirement-and-invariantsSkill
- single-session-dev-flowSkill
- slice-closeoutSkill
- spec-and-planSkill
- teach-pqw-skillsSkill
- tech-research-and-reuseSkill
- think-closed-loopSkill
- think-evidenceSkill
- think-model-firstSkill
- think-orthogonalSkill
- think-ought-vs-isSkill
- think-right-then-wellSkill
- think-unknownsSkill
- write-agents-mdSkill
The file
Files
领域影响分析与顶层设计
位置:定义期第 2 步。上一步 requirement-and-invariants,下一步 tech-research-and-reuse。顺序与例外见入口技能 single-session-dev-flow。
拿着需求与不变式单,回答三个问题:哪些现有领域受影响,要不要新领域;谁是这一程的重点、次要、连带;系统全局上这些领域怎么摆。产出领域影响分级表和最粗粒度的顶层设计,它们是后面细化、论证、实施、验收的总边界。
下面两节是思维模型 think-orthogonal 在领域上的做法:先拆轴、每条轴找一个拥有者,再按轴交叉出的表逐格分级。分级按的是与本程改动的关系,不按路径。
先找轴,再找领域
分级之前先问现有领域的结构能不能直接承载这个需求,能就没有新领域。先答三问:应然、实然、差异。做法加载技能 think-ought-vs-is。
需求提出时通常带着一个机制、症状或里程碑,不带它所在的维度。问题里出现的那个词多半不是问题所在的轴。先做维度分解,再对领域:
- 剥掉表面。问这里真正在变的量是什么,什么必须保持不变。
- 命名轴。逐项问:谁在做(身份),允不允许(授权、策略),在哪里运行(落点、执行环境),哪份工作要持续(会话、工作),谁执行、活多久(运行时寿命),怎样被看见(观察),怎样接线(装配)。每条轴落在一个拥有者。
- 找到这条轴的拥有者,先读它的现行正文。多数待决事项在这一步消失,因为拥有者已经回答了它。
- 查耦合。检查答案有没有让一条轴决定另一条轴。常见形式:隔离提供者决定授权范围;一个实例的寿命决定观察挂在哪里;调用方的寿命决定被调用工作的寿命;提交协议的一个细节反过来决定事实归谁。
- 到这一步才分类剩下的事项:某条轴上没有拥有者的缺口是新设计;同一条轴上两个都自洽的答案交有权者裁决;其余是实现已经设计好的东西。
迷失了轴的信号:问题里带着机制名;一个答案有两个来自不同领域的理由;其他领域的词出现在本领域契约里;A 的寿命决定了 B 的寿命;一个默认值悄悄成了边界;请有权者在不同轴的选项之间二选一,而这些选项并不互相替代。
跨领域的设计怎么分解
一个设计横跨几个领域是常态。正交要求把设计拆成若干份,每一份落在一条轴上并有一个拥有者,合起来才成立的部分单独交给一个组合承担者。
- 列出设计触碰的全部事实与决定。列事实,不列模块。
- 为每条事实命名轴并找到拥有者。一条事实只有一个拥有者。找不到拥有者的先记下,不塞给相邻领域。
- 每个拥有者只用自己的词说明自己提供什么、需要什么。需求方为自己的需求声明端口,实现方实现它;实现方认识端口契约,需求方不认识实现方。
- 把集成本身当作有拥有者的对象。集成方认识所有参与方,它是协调者、适配器或装配,不是任何一方的内部。
- 在接缝上写组合保证:谁参加,成立条件是什么,失败归谁。几个局部成功不等于整体成立。
- 三个检查:拿掉任何一方,其余各方的含义是否仍成立;每一份能否独立使用;是否有一方读取另一方的内部状态。
- 最后才套依赖方向。正交约束含义和归属,不约束运行时谁调用谁。
四种做坏的样子:合并(几条轴收进一个对象)、涂抹(一条轴的规则散在几个领域各判一遍)、泄漏(内层认识了外层)、假正交(按目录拆开,含义仍耦合)。
方法上的对照加载技能 pstack:principle-model-the-domain。
分级
| 级 | 判据 | 本程对它做什么 |
| 重点 | 需求的能力主要由它提供;不变式主要由它守 | 完整走细化设计、形式化判断、落盘 |
| 次要 | 要为重点领域提供或消费新的契约、投影或引用 | 只建到履约必需的部分,改契约要同步消费者 |
| 连带 | 行为不变,但受影响:接口形状、依赖方向、测试、规格 | 只定接口与回归验证,不进细化设计 |
| 新领域 | 某条轴上没有拥有者,而且不能塞给相邻领域 | 立具名责任,进重点 |
连带范围靠消费者普查,不靠猜:加载技能 pstack:blast-radius,找出改动会在别处破坏什么,并用运行代码证明关键的一两条事实。
顶层粗粒度设计
只定到总边界,不定内部:参与的领域与它们的责任一句话;领域之间的关系用一张图(上下文图或协作图);每条不变式由哪个领域或哪个接缝守;组合保证由谁承担。更细的归 detailed-domain-design。
统一语言与领域模型的做法加载技能 mattpocock-skills:domain-modeling。
产出
填领域影响分级表。分级表的路径写进 spec 的责任分级,交付期按它判一个问题在不在本程。填完的判据:每条不变式都能指到一个守它的领域或接缝;每个「新领域」都写了为什么相邻领域承担不了;连带清单来自普查而不是列举。
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

