Author: Yuchen Zhang
初步设想:
用户每记一条笔记都用<Paper ID, Author, Note ID, Note Content>表示,其中Note ID表示这条笔记唯一的识别码,Author表示作者身份,可以有两种模式:
1. Author = User ID,用户以私人身份记录
2. Author = Channel ID,用户在某个频道内发言
其中,第一种模式是长期保存的笔记,且用户可以决定是否分享给他人,以及随时取消分享。第二种模式是临时讨论模式,在讨论开始时,组织者先申请一个唯一的Channel ID然后分发给每个参与讨论者,讨论期间所有人都以这个Channel ID发言。讨论结束后,只要保存这个Channel ID,就可以访问讨论期间所有人提交的笔记内容。
这样,针对某一个特定的paper,用户可以直接访问到的笔记就是:
1. 由他的User ID可以检索到的所有笔记内容
2. 由他账户下记录的所有Channel ID可以检索到的所有笔记内容
所以每个账户需要有个存储空间用来存放他此前收集的所有Channel ID,也就是参加过的所有讨论。
采用channel机制的意义在于:当讨论结束后,每个参与者都可以完整地保留讨论记录,而无需依赖其他讨论者的合作。
另一方面,当用户希望将他的私人笔记和他人共享时,可以建立一个共享组(group)。首先需要申请一个group ID,并在group内开辟一个用户列表储存区,加入自己的user ID。然后,就可以将这个group ID分发给其他用户。其他用户收到这个group ID后,如果同意共享,则也将自己的user ID也加入group的列表里面,并储存这个group ID。这样,每个账户需要有另一个储存空间来存放他收到的所有group ID。这样,用户可以间接访问到的笔记就是:
3. 先由Group ID检索出同组内的用户的user ID,然后根据这些user ID(以及与之联系的Channel ID)检索到的所有笔记内容。当然,每个用户都可以设置权限使得自己的某一部分笔记无法被其他用户看到(例如以Channel ID检索的笔记在默认情况下是对其他用户不可见的)
当用户希望取消在某个group的共享时,他只需将自己的user ID从group列表中删除即可。此后其他用户将无法再访问到他的笔记。group的创建者也可以直接删除整个group列表。这样其他用户即使还保留这个group ID也没用了。采用group机制的意义在于:
* 用户可以随时添加和取消共享
* 共享组不存在传递性,即如果A和B属于共享组1,而B和C属于共享组2,则A是无法访问C的笔记内容的。
当用户和服务器同步时,将为用户下载1,2,3所能检索的所有笔记内容。当用户发布发表一条新笔记时,如果是讨论模式,则服务器将之推送给使用同一channel ID发言的其他用户(可以建立一个临时空间储存这些用户的账号)。如果是非讨论模式,可以推送给用户参与的group里的其他成员。