建模像github每行评论这样的功能

时间:2011-04-26 21:16:23

标签: git design-patterns mongodb couchdb

我正在构建一个系统,允许用户创建内容并编辑该内容,同时保持对所有先前版本的访问。在某种程度上,您可以考虑StackOverflow如何允许人们发布问题,然后编辑问题,并仍然查看所有以前的版本。

但是,我的用户需要能够在内容中选择文本并为该特定文本添加注释。因此,他们可以定位内容中的特定单词或短语,并为其添加注释,而不是在整个blob内容中添加注释(例如在SO中)。

当我显示内容blob时,无论当前版本包含什么,我都需要显示所有添加到其中的注释。因此,如果删除了附加注释的单词或短语,我仍然需要显示注释,尽管该注释可能表明它未附加到当前版本中。

Github有一项功能,允许成员向特定的源代码行添加注释。这与我想要做的非常接近。但是,我相信Github,评论仅附加到该文件的特定版本。该文件的未来版本不会显示该评论。

像Microsoft Word这样的软件也具有这样的功能。但我的应用程序将是一个具有用户协作功能的webapp,因此多个用户可以对任何给定内容发表评论。

我正在考虑使用像CouchDB或MongoDB这样的NoSQL解决方案来存储内容和评论的blob。另一种选择是使用git来维护内容blob和版本控制,但我不确定在哪里存储评论信息。

有关如何最好地建模和存储此类信息的任何建议?评论如何引用内容中的单词或短语?如何最好地了解评论何时附加到当前版本的文本?

1 个答案:

答案 0 :(得分:0)

您可以以某种方式建模,您可以为用户发出的每条评论提供一个文件(或任何其他适合保存元数据的对象,例如在数据库中),并创建一个合并文件的特定命名约定被注释的文件的名称,blob的SHA1以及每个文件上多个注释的索引。所以对于每个文件foo,你可以有类似的东西:

foo-blob1-0
foo-blob1-1
foo-blob1-2
foo-blob1-3
foo-blob2-0
..
foo-blobm-0
..
foo-blobm-n

当提交新版本的文件时,会有一个新的blob(或者可能是旧的blob再次显示,因为文件的先前版本可能由于添加和删除文本而相同),人们可以评论上。显然,这些对象还需要知道所评论文本的范围。