产品设计

Duolingo:把看懂错误和再次练习接起来

Duolingo 是面向日常学习者的语言学习应用。答题后的解释帮助理解这一次回答,练习入口则让人主动回到薄弱环节,安排下一次学习。

先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。

01
界面实现

给答案解释做一个独立的小组件

假设你负责语言练习页面。答题后可以展开解释,但页面收到新回答时,不应继续显示上一份回答的展开状态。请实现一个 AnswerFeedback(答案反馈)小组件。

  1. 已有数据: 组件接收 answerId(一次回答的编号)、用户回答、正确答案,以及 explanation(解释文字,或表示暂无解释的 null)。同一题重新提交也会获得新编号;同一编号下数据不会变化,不需要网络请求。
  2. 显示规则: 一份回答首次显示时,解释收起。有解释时提供“查看解释”,展开后可“收起”;无解释时显示“暂无解释”,不出现展开按钮。父页面传入不同 answerId 时必须收起,即使题干相同;同一编号的普通重绘保留展开状态。按钮可用键盘操作,并表达当前展开状态。
  3. 验收: 回答 A 展开后,同编号重绘仍展开;换成 B 后收起并显示 B 的答案;再换成 explanation=null 的 C 后,不出现 A 或 B 的解释,也没有展开按钮。
  4. 交付: 提交组件、可运行示例和简短的状态归属说明,按上述路径核对。
查看思路
  1. 区分父页面提供的回答数据与组件拥有的展开状态。用一次回答的身份界定状态的生命周期。

  2. 先走 A 展开、A 重绘、B 替换这条路径,检查何时应该保留状态、何时需要重置。

  3. 再检查无解释的 C:界面与可执行操作应一致。用原生按钮和展开状态属性验证键盘交互。