输入关键词开始搜索

食材库模块

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 显示正确