Samsung Food:从想做一道菜,到列出真正要买的食材
Samsung Food 把食谱、份量和购物清单连起来。它值得借鉴的地方,是让用户在内容变成行动之前确认人数、排除已有材料,再与家人协作采购。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考
撤下一道菜,保留其他采购需求
为一个本地备餐工具实现购物需求模块。每道菜用唯一编号标识,食材用统一名称标识,数量均为克;另有一份手动添加的需求。用户可以新增或替换一道菜的食材需求、移除一道菜,以及读取按食材合并的购物量。手动需求初始只有番茄 50 克,本题中不再编辑。
- 一道菜被替换时,它原来的贡献全部被新需求替代;移除时只移除它的贡献。读取总量不能改变任何来源。总量为零的食材不出现在结果中。输入都是非负整数,移除不存在的菜保持结果不变。
- 加入菜 A:番茄 200 克、鸡蛋 100 克;菜 B:番茄 150 克。读取应为番茄 400 克、鸡蛋 100 克。将 A 替换成番茄 100 克后,应为番茄 300 克,鸡蛋消失;再移除 B,应只剩番茄 150 克。再次移除 B,结果不变。
- 交付可运行模块和上述调用,简述数据如何表达“谁需要这些食材”,以及这种表达怎样支持修改菜单。无需单位换算、库存或真实账户。
查看思路
先想只保存总量会失去什么信息,尤其是撤下某道菜时。让菜谱来源和手动来源可以独立存在,再考虑总量是随时计算还是随修改维护;用替换和重复移除的例子检查是否误扣了其他来源。