think-model-first
Installation
SKILL.md
建模先于代码
回答的问题:代码该长成什么形状。偏函数是「不是对所有输入都有定义的函数」,例如「关闭会话」只在会话打开时有定义。全化是把剩下的情况也定下来:会话已关闭时再关一次,答「已关闭」,不报错也不崩。模型定义的是实现的形状,所以它排在代码之前。
三句动作
- 把状态和操作写成偏函数:每个操作在哪些前置状态下有定义。 状态名与操作名取自统一语言。
- 全化:定义域之外的每一格给一个确定的答复。 答复是拒绝、幂等返回或显式错误。不变式排除的格写「不可达」,不处理。全化之后实现里不再有「不该发生」的分支。
- 翻成领域模型和对象模型再写代码。 概念与边界按领域建模,对象怎样协作按 SOLID,名字取自统一语言。代码里的每个类型能指回模型。
全化表说的是什么必须成立,不是代码该长成什么样。照着它直接写,得到一个按状态分支的大函数,对但难维护;翻成领域模型与对象模型,对的东西才写得简洁、能维护。