代码中存在若干可维护性 / 性能 / 架构层面的优化点,建议纳入后续迭代(不影响当前演示运行)。
dailyGoal = 10
getDailyWords、getProgress、learnWord 各自硬编码 const dailyGoal = 10;。修改每日目标需同步改三处,易遗漏导致统计口径不一致。
getDailyWords
getProgress
learnWord
const dailyGoal = 10;
建议:提取到 users_col 字段或独立配置集合/环境变量。
users_col
// 先查全部学习记录(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
建议:用 Query.notEqual / Query.notContains 在数据库层排除已学单词;分页处理大数据集。
Query.notEqual
Query.notContains
Login.ets
HttpUtil.ets
{code:-1}
getFunctionId
nameFromPath
if
建议:拆分 ViewModel;HttpUtil 增加指数退避重试;函数映射改为 Record<string,string> 配置。
Record<string,string>
目前仅有模板测试(List.test.ets / Ability.test.ets / LocalUnit.test.ets),无业务逻辑与云函数测试。建议补充 ViewModel 单测与云函数核心逻辑测试。
List.test.ets
Ability.test.ets
LocalUnit.test.ets
优先级:P2/P3,建议在 P0(#1)修复后安排。
问题描述
代码中存在若干可维护性 / 性能 / 架构层面的优化点,建议纳入后续迭代(不影响当前演示运行)。
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 单测与云函数核心逻辑测试。