食材库模块
401. 食材库:实体/Repository/Service + 种子数据
日期: 2026-05-22 关联开发任务: 阶段 4 任务 4.1 食材库 关联设计文档: 004.数据库设计文档 §4.7、005.接口设计文档 ingredient 部分
一、问题/需求描述
需建立食材管理系统,包括浏览、搜索、查看详情,并预置种子数据让应用安装即有内容。
二、思路
三层标准架构:
IngredientEntity:纯数据载体(name/category/cal_per100/pro_per100/carb_per100/fat_per100)IngredientRepository:继承 BaseRepository+ QObject IngredientService:继承 BaseService,种子数据注入,expose to QML
三、逻辑推导
种子数据策略
- 系统食材带有
is_system = true(虽然 schema 无此字段,通过创建者判断) - 首次启动:
getAll().count() == 0→ seed - 种子数据源:硬编码在 seedSystemIngredients() 中
每 100g 归一化
- 热量、蛋白质等字段来自 USDA/中国食物成分表,统一每 100g 标准
四、方案对比
| 方案 | 描述 | 选择 |
|---|---|---|
| 种子数据硬编码 | 编译进 C++,修改需重新编译 | ✅ |
| JSON 文件 + 导入 | 灵活但需维护额外文件 + 解析 | ❌ 当前阶段不必要 |
五、项目应用
- 食材列表
IngredientListPage:从 ingredientService.getAll() 加载,Repeater 渲染 - 详情页
IngredientDetailPage:展示完整营养数据 + 类别标签
六、验证
- 首次启动 → 食材列表有 107 个条目
- 搜索”鸡蛋” → 精确匹配到 1 条
- 详情页 → 每 100g 热量 144 kcal 显示正确