红烧牛肉¶
📐 度量标准:本菜谱所有模糊表述(块/勺/火候/油温/熟度)均以_spec.md(度量标准库) 为准,可点击各章节锚点查看。 厨房里的「分布式批处理任务」——分批预处理(焯水+炒糖色)→长耗时计算(慢炖90min)→结果聚合(收汁),最终输出一碗软烂入味的牛肉。
常量定义(Constants)¶
| 常量名 | 值 | 来源 |
|---|---|---|
| FIRE_LOW | 小火(120-140℃,火焰不舔锅底) | _spec §3 |
| FIRE_MID | 中火(160-180℃,火焰舔锅底一半) | _spec §3 |
| FIRE_HIGH | 大火(200℃+,火焰包住锅底) | _spec §3 |
| OIL_30 | 三四成热(90-120℃,竹筷缓慢冒小泡) | _spec §4 |
| SOY_SAUCE | 2勺(30ml,汤勺) | _spec §2 |
| DARK_SOY | 1大勺(15ml,火锅勺) | _spec §2 |
| COOKING_WINE | 3勺(45ml) | _spec §2 |
| SALT | 1小勺(5ml,咖啡勺) | _spec §2 |
| SUGAR_CANDY | 25g(冰糖) | — |
| STEW_TIME | 90min | — |
| WATER_BOWL | 3碗(750ml,标准饭碗) | _spec §2 |
| STARCH_WATER | 淀粉:水=1:3 | _spec §6 |
食材清单(Input)¶
| 食材 | 用量 | 切配规格 | 备注 |
|---|---|---|---|
| 牛腱子/牛腩 | 600g | 切块(3cm见方,麻将牌) | _spec §1,牛腱子更有嚼劲 |
| 冰糖 | 25g | 整粒 | 炒糖色专用 |
| 姜 | 1块 | 切片(2-3mm厚,1元硬币) | _spec §1 |
| 葱 | 2根 | 切段(4-5cm) | _spec §1 |
| 蒜 | 4瓣 | 整粒 | 去腥增香 |
| 八角 | 2颗 | 整粒 | |
| 桂皮 | 1小段 | 约3cm | |
| 香叶 | 3片 | 整叶 | |
| 干辣椒 | 3个 | 整只 | 可选,微辣 |
| 生抽 | 2勺(30ml) | — | _spec §2 |
| 老抽 | 1大勺(15ml) | — | _spec §2 |
| 料酒 | 3勺(45ml) | — | _spec §2 |
| 盐 | 1小勺(5ml) | — | _spec §2 |
预处理(Preprocess)¶
- 牛肉切块(3cm见方,麻将牌),逆纹切(切断肌肉纤维,炖后更嫩)。
- 调用
[_spec §6](_spec.md#preprocess) 焯水():牛肉冷水下锅,加姜片、COOKING_WINE(2勺料酒),大火煮开后撇去浮沫——这是「垃圾回收」的第一阶段,把血水中的杂质对象清理掉。捞出后用温水冲洗干净,沥干备用。 - 姜切片、葱切段、香料备好。
主流程(Main Logic)¶
-
炒糖色(状态机初始化):热锅倒少许油,油温 OIL_30(三四成热),下 SUGAR_CANDY(25g冰糖),调用
[_spec §6](_spec.md#preprocess) 炒糖色()——FIRE_LOW(小火)熬至冰糖融化,颜色经历浅黄→琥珀→枣红→冒细密小泡的状态流转。终态判定:枣红色+表面冒细密小泡,此时立即进入下一步。这是整道菜的初始化阶段,糖色决定了最终色泽的基类。 -
下牛肉翻炒(对象属性赋值):糖色到达终态,倒入焯好的牛肉块,FIRE_MID(中火)快速翻炒,让每块牛肉均匀裹上糖色——类似
for循环遍历集合给每个对象设置color属性,未裹上糖色的块就是未初始化对象。炒至牛肉表面微焦、边缘收缩(约 3min)。 -
调味加汤(配置注入):加入姜片、葱段、蒜瓣、八角、桂皮、香叶、干辣椒爆香,倒入 COOKING_WINE(1勺料酒)、SOY_SAUCE(2勺生抽)、DARK_SOY(1大勺老抽),翻炒均匀后加入 WATER_BOWL(3碗热水),水量没过牛肉约 2cm。调味是「依赖注入」:香料(配置项)→酱汁(运行时环境)→牛肉(核心对象),层层注入风味。
-
小火慢炖(后台异步任务):大火烧开后转 FIRE_LOW(小火),盖盖炖煮 STEW_TIME(90min)。这是一个长耗时后台异步任务——
while 炖煮时间 < 90min: 保持小火微沸; 每 20min 检查一次: if 汤汁低于牛肉: 加热水补充。牛肉的软烂是渐进式的,就像异步任务的进度条从 0% 走到 100%,中途不要频繁开盖(相当于频繁查询任务状态会拖慢执行)。 -
大火收汁(GC 压缩+终态判断):90min 后,牛肉已软烂(筷子能轻松插透、无血水渗出,_spec §5),拣出葱姜香料,转 FIRE_HIGH(大火)收汁。
while 汤汁未浓稠挂糊: 翻动收汁——这是垃圾回收的压缩阶段,把多余汤汁(内存碎片)压缩成浓稠酱汁。加入 SALT(1小勺盐)最后调味(盐放早了会让蛋白质紧缩,肉不易烂,这是「延迟初始化」原则)。需要时淋入 STARCH_WATER(淀粉:水=1:3)勾芡至挂糊(_spec §5)。 -
出锅(返回值):装盘,牛肉色泽红亮、酱汁浓郁,可撒葱花点缀。
翻车预警(Bug Report)¶
- ⚠️ Bug: 牛肉炖不烂、发柴 → 根因:顺纹切肉 or 盐放太早 or 炖煮时间不够 or 中途加冷水。修复:逆纹切块(_spec §1)、最后放盐、炖煮至少 90min、中途只加热水。
- ⚠️ Bug: 糖色炒糊发苦 → 根因:火大 or 熬过头。修复:FIRE_LOW(小火)慢熬,盯紧状态机终态(枣红冒小泡),发黑立即丢弃重来。
- ⚠️ Bug: 汤汁越炖越少、牛肉粘锅 → 根因:火太大(不是微沸而是翻滚) or 水加少了。修复:保持 FIRE_LOW(小火)微沸状态,水量没过牛肉 2cm,中途及时加热水。
完成标准(Test Cases)¶
| 测试项 | 预期结果 | 判定方法 |
|---|---|---|
| 视觉测试 | 牛肉色泽红亮均匀、酱汁浓稠、无焦黑 | 肉眼观察 |
| 口感测试 | 牛肉软烂不柴、酱香浓郁、咸甜适中、微辣可选 | 品尝 |
| 状态测试 | 筷子轻松插透、无血水渗出、酱汁挂勺 | 筷子测试+倾斜盘观察 |
| 时间测试 | 从开火到出锅约 120min | 计时 |