
















Weichky 2025年 07月 31 日
You eat a bee!!! You eat a bee!!!谐音梗不好笑
后面不会再有这么巧的谐音梗了(
其实是说,在我们下面假设的情境中,怎么由A得B(由A得B.jpg
本系列整理了Existimer开发第0阶段的设计思路。这是本系列第二篇讨论,主要从数据结构的视角讨论了任务之间的关系。
用户在复习考研数学。一开始在复习高数,于是创建了“高数”任务。随后进入线性代数复习,又创建了“线代”任务。显然,两者同属于考研数学这一分类。或者在复习高数之后,同时复习线代和概率论。
天然的,我们能够想到用链表来描述这一结构。
每一节点除了自己的信息以外,还包括父节点和子节点的信息。这时就有两种可能的数据结构:
class Task {
String name;
String uuid;
// and so on
// ....
bool hasChild;
String parentUuid;
}或者
class Task {
String name;
// ...
bool hasChild;
String parentUuid;
String childUuid;
}以及两者分别添加bool hasParent后的版本。区别在于一个是单向的,一个是双向的。
class Task {
String uuid;
String name;
// ....
}
class TaskTransition {
String fromUuid;
String toUuid;
int count;
}大致是这种数据结构。
不分析了,没理由不用图。关键在于是DG还是DAG,至于更复杂的数据结构,不是这个阶段考虑的。有向图的有向是否必要?我们强调的是一种普遍的关系,而非一种传统的层级。展示顺序是否会破坏这种感觉?我们是否需要有向?这种结构的有向图,比起表示任务之间的关系,似乎更适合拿来做历史。
这并不矛盾。关键在于呈现给用户的是什么。开发者本人并不喜欢思维导图式的,或者知识图谱式的。虽然满满成就感,但是一次性信息量太大。青睐点云、泡泡、词云式的,感受直观的。问题这些元素也过与繁复,似乎只有传统的折叠展开式的。这种去中心的结构可以这样展示:不同Task具有不同颜色;可以把一个Task拖拽到另一个Task上,形成一个连接;基于连接自动算出最大联通,然后通过算法生成一个混色(保证好看,不能简单叠加,但也要体现出一个综合);根据UI放大的不同层级(或利用手势、点击),界面内显示的Task相应的混色或分色(具体方法还需论证。比如分离出液滴?像风车一样圆形展开?像饼状图、环形图一样?)。又产生了新的问题,不同比例下的Color Cluster是否应该有名字?这应当放到统计界面,还是选择任务界面?如果分开制作,选择界面怎么办,是否又要回归层级?(这很重要,人们往往快速开始行动,而后慢慢梳理和统计,选择界面必须足够干净迅速)
在实际使用中,用户往往并不会事先设计好任务之间的结构关系,而是在复习过程中不断跳转、回顾和重组。我们必须允许:
因此,数据结构、界面展示与用户行为之间,必须留出弹性空间。
用有向图 + 轻权重连接作为底层关系建模,同时在任务本体中保留最小元信息。
但是实际上呈现出的是无向图,只是方便区分、管理和统计。
class Task {
String uuid;
String name;
String? color; // 手动选择的颜色,也可为空
String? description; // 可选说明
DateTime createdAt;
}每个任务就是一个独立的点,仅包含基础信息,例如 uuid、名称、颜色、创建时间等。
关系通过单独的 TaskRelation 表表示,其中包含:
coOccurrenceCount(例如交替切换次数)weight(可组合自动+手动)manuallyLinkedtag(如“数学复习组”、“线性相关”)这种结构允许任意任务之间互相关联,既可以用作分析,也支持 UI 展示。
class TaskRelation {
String fromUuid;
String toUuid;
int coOccurrenceCount; // 自动生成:两个任务在多次切换中共同出现的次数
double weight; // 可综合权重(手动增强 + 自动推测)
bool manuallyLinked; // 用户是否手动建立了连接(如拖拽)
String? tag; // 可选的标签(“数学复习”、“同一章”...)
}用户与系统的“认识路径”往往不同步。有些连接是用户主动创造的(手动连接、显式分类),有些是被动形成的(长期使用中自然联想)。
系统在后台持续记录任务切换历史,如 A → B、B → A。
用户可以:
用户在执行前的目标是快速进入状态,而不是理解结构或编辑任务。应遵循以下三条原则:
此界面以列表为主,避免展开式结构(如思维导图、嵌套层级),因为那会干扰用户进入任务状态。
这个方案强调三点:
未来可以进一步考虑:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。