← [ BACK_TO_NOTES ]

MemoFlow · Todo / Task 时间建模笔记

按版本记录任务时间、重复规则、模板实例与 TaskPlan / TaskOccurrence 设计。

#blog #growing #dev

Todo / Task 模块目标

准备给个人效率应用增加待办事项。普通 Todo 只需要标题和完成状态,但我还希望能够安排开始时间、结束时间、提醒以及每日或每周重复的行动。

所以数据结构不能只围绕一个 completed 布尔值设计。

V1.0.0

先把任务时间拆成不同情况。

  • 时间点任务: 例如早上八点抢票,重点是某个具体时刻。
  • 时间段任务: 例如八点到九点跑步,有开始与结束时间。
  • 全天任务: 更关注哪一天完成,不一定有小时和分钟。
  • 重复任务: 每日、每周、每月等,需要长期规则和结束条件。

时间类型还要考虑时区与跨天情况。一个“每天 08:00”的本地时间,和某个固定 UTC 时间戳不是同一件事;保存时不能只保留渲染层临时生成的字符串。

第一版先明确 TimePoint、TimeRange、RecurrenceRule 等值对象的表达能力,再决定数据库字段与表单如何对应。

v1.1.0

重复任务需要区分“行动规则”与“今天这一次”,所以采用 Template / Instance。

模板保存标题、重复时间、提醒规则等稳定定义;实例是根据模板生成的一次执行,可以独立标记完成或跳过。修改模板不应该未经确认就重写已完成的历史实例。

生成规则还需要结束条件:永不结束、到某个日期停止,或者执行指定次数。对于周重复,要能选择星期几;月重复还需要考虑每月具体日期以及不存在的日期如何处理。

这样安排一次任务、生成多次实例和保留执行历史可以明确分开。

V2.0.0

现在把 Template / Instance 收敛为 TaskPlan / TaskOccurrence,进一步强调计划状态与执行事实不同。

TaskPlan 定义行动和调度意图;Occurrence 保存这一次的时间快照、状态、执行时长与 Checklist。计划暂停或关闭,不意味着历史 Occurrence 应被删除。时间过去也只产生 Overdue 提示,不能擅自把待执行改成 Missed。

Task 的提醒时间由自己的规则产生调度意图,再交给 Scheduler 可靠唤醒;真正的日历展示属于 Schedule / Planner。这样 Todo 发展为任务系统时,不必把后台定时器和完整日历都写进 Task 内部。

创建于 2026/3/5 更新于 2026/10/17
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本