Open
[Enhancement][P2] 可维护性与性能优化:dailyGoal 硬编码、查询效率、MVVM 分层、测试缺失 #4
雅皮士Add on  9 days ago
雅皮士
雅皮士
9 days ago Create

问题描述

代码中存在若干可维护性 / 性能 / 架构层面的优化点,建议纳入后续迭代(不影响当前演示运行)。

1)dailyGoal = 10 在多处硬编码

getDailyWords、getProgress、learnWord 各自硬编码 const dailyGoal = 10;。修改每日目标需同步改三处,易遗漏导致统计口径不一致。

建议:提取到 users_col 字段或独立配置集合/环境变量。

2)getDailyWords 查询效率低

// 先查全部学习记录(limit 500),再查全部单词(limit 200),最后内存过滤
const { documents: learnedDocs } = await databases.listDocuments(DB_ID, COL.records, [Query.equal('userId', userId), Query.limit(500)]);
const { documents: allWords } = await databases.listDocuments(DB_ID, COL.words, [Query.limit(200)]);
wordsDocs = allWords.filter(w => !learnedWordIds.includes(w.$id)).slice(0, 10);
  • limit(500) / limit(200) 在词库或记录增长后会截断数据;
  • includes 为 O(n*m) 复杂度。

建议:用 Query.notEqual / Query.notContains 在数据库层排除已学单词;分页处理大数据集。

3)端侧无 MVVM 分层,网络层无重试

  • Login.ets 等页面直接把业务逻辑(表单校验、调用 HttpUtil、路由跳转)写在组件里,缺少 ViewModel 层,难以测试与复用;
  • HttpUtil.ets 网络失败直接返回 {code:-1},无重试/退避机制,弱网体验差;
  • getFunctionId / nameFromPath 用 6 个 if 硬编码映射,新增函数需改两处。

建议:拆分 ViewModel;HttpUtil 增加指数退避重试;函数映射改为 Record<string,string> 配置。

4)测试缺失

目前仅有模板测试(List.test.ets / Ability.test.ets / LocalUnit.test.ets),无业务逻辑与云函数测试。建议补充 ViewModel 单测与云函数核心逻辑测试。

优先级:P2/P3,建议在 P0(#1)修复后安排。

likedislike
雅皮士雅皮士
9 days ago Associated pull request
雅皮士雅皮士
9 days ago Associated pull request
雅皮士雅皮士
9 days ago Associated pull request
雅皮士雅皮士
9 days ago Associated pull request