CookingCoder:极客菜谱的领域建模#
程序员学做饭最大的痛点:“块"是多大块?“勺"是多大的勺?“适量"是多少? 传统菜谱的模糊描述对新手极不友好。CookingCoder 用领域建模的方式重写家常菜:规格(Spec)+ 步骤(Steps)+ 流程(Flow)——把菜谱写成程序。
一、问题:菜谱的"模糊性”#
传统菜谱的问题:
核心洞察:菜谱的模糊,不是"无法描述”,是没建立度量体系。做饭和编程一样,需要常量和单位。
二、领域建模:三个核心抽象#
1. 规格(Spec):统一的度量体系#
把模糊量词全部规格化:
1
2
3
4
5
6
7
8
9
10
11
12
|
## 规格表(全局常量)
| 量词 | 规格 | 说明 |
|---|---|---|
| 1 块 | 3×3×2cm(约 40g) | 土豆/萝卜等根茎类 |
| 1 勺 | 15ml(标准汤勺) | 生抽/料酒/油 |
| 1 小勺 | 5ml(调料勺) | 盐/糖/鸡精 |
| 大火 | 炉灶最大火力 | 炒/收汁 |
| 中火 | 火焰约 6cm | 煎/炖 |
| 小火 | 火焰约 3cm | 焖/煨 |
| 断生 | 肉变色无血水 / 菜变软半透明 | 状态判定 |
| 收汁 | 汤汁浓稠挂勺,剩原量 1/3 | 状态判定 |
|
规格表是全项目的"常量定义”——所有菜谱引用同一套标准,就像代码里抽公共常量。
2. 步骤(Steps):程序化的动作描述#
1
2
3
4
5
6
7
8
9
10
11
|
## 步骤
1. [准备] 土豆去皮,切成 3×3×2cm 的块(规格:1 块=40g),泡水 5 分钟去淀粉
2. [预处理] 蒜 2 瓣拍碎,葱 1 根切 2cm 段
3. [烹饪] 中火起锅,加 2 勺油(30ml),油温至"筷子放进去冒小泡"
4. [烹饪] 下蒜末煸炒 15 秒至出香(有蒜味无生味)
5. [主料] 下土豆块翻炒 2 分钟,至表面微透明
6. [调味] 加 3 勺生抽、1 小勺糖,翻炒均匀
7. [炖煮] 加开水至没过土豆(约 300ml),大火烧开转小火,盖盖焖 12 分钟
8. [收汁] 开盖转大火,收汁至汤汁浓稠(剩 1/3,能挂勺)
9. [出锅] 关火,撒葱花,装盘
|
程序化要点:
3. 流程(Flow):条件分支与状态机#
1
2
3
4
5
6
7
8
9
10
11
12
|
## 判定分支
- 如果土豆切得大(5cm 块)→ 焖煮时间 +5 分钟
- 如果喜欢软糯 → 焖煮 +3 分钟,收汁前压一下
- 如果汤汁剩太多 → 大火收汁多 2 分钟
- 如果太咸 → 加半勺糖平衡(不是加水!)
## 关键节点(状态机)
[准备] → [烹饪] → [调味] → [炖煮] → [收汁] → [出锅]
↓ ↓ ↓ ↓ ↓
切好 油温对 尝味调整 时间到 挂勺 装盘
|
像代码一样:每个关键节点都有判定条件(if)和修正动作(catch)——新手犯错时知道怎么救。
三、类比:用编程概念讲做饭#
CookingCoder 的特色:菜谱里的编程类比,让程序员秒懂:
| 编程概念 |
做饭类比 |
| 常量定义 |
规格表(1 勺=15ml、大火=最大火力) |
| 垃圾回收 |
边做边收拾(洗完用过的碗,最后战场干净) |
| 面向对象 |
同一道菜换主料 = 继承(宫保鸡丁 → 宫保虾仁) |
| 公共方法抽取 |
所有炒菜共用的"爆香"步骤(蒜末 15 秒出香) |
| 状态机 |
烹饪阶段流转(生 → 半熟 → 熟 → 收汁) |
| 单元测试 |
成品判定(断生=无血水、挂勺=收汁完成) |
| 异常处理 |
太咸加糖、糊锅关火、补救分支 |
四、标签体系:菜系 × 口味 × 人群#
多维度标签解决"今晚吃什么"的检索问题:新手 + 快手 + 下饭 过滤出符合条件的菜。
五、技术实现#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
---
title: "土豆烧鸡块"
tags: [家常, 下饭, 新手友好]
difficulty: 2/5
time: 35 分钟
serves: 2 人
---
## 规格引用
- 鸡块:4×3cm,去骨
- 土豆:3×3×2cm
## 步骤
...
|
六、踩坑记录(建模的坑)#
- 过度规格化:把"盐 1.7g"写死 → 新手没厨房秤反而困惑 → 用"1 小勺(约 5ml)"+“可调整"平衡精确和可用
- 忽略"状态判定”:只写时间不写状态(“炒 2 分钟"没写"炒到变色”)→ 每步必须有"判定条件"
- 规格表太长:50 个规格新手记不住 → 只留高频 8-10 个,特殊规格随菜谱内联
- 没有补救分支:写步骤不写"如果失败怎么办" → 关键节点都加"错误处理"
CookingCoder 的核心认知:
- 模糊不是无法描述,是没建度量体系:规格表是菜谱的"常量定义"
- 程序化 = 判定条件 + 具体量 + 验收标准:新手照做就能成
- 编程类比降低理解成本:程序员秒懂"火候状态机"
- 补救分支是新手友好度:会犯错,得有 rescue
把做饭当工程:常量、状态机、异常处理都到位,菜谱就从"玄学"变成"可复现的程序"。
微信公众号「福清而不淡」
后端架构 · AI 工程 · 云原生的一线实践,扫码关注,不错过更新。
本文已同步发布到公众号,欢迎留言交流。