2011-04-26 49 views
2

我正在構建一個系統,允許用戶創建內容並編輯該內容,同時保持對所有先前版本的訪問。在某種程度上,您可以考慮StackOverflow如何讓人們發佈問題,然後編輯問題,並仍然查看以前的所有版本。建模像github的每行評論功能

但是,我需要將用戶能夠選擇的文本內容和註釋添加到特定的文本。因此,他們不用爲整個內容塊添加評論(如在SO中),而是針對內容中的特定單詞或短語,併爲其添加評論。

當我顯示內容的blob,我需要證明是有史以來添加到它,不管什麼樣的最新版本包含了所有的意見。因此,如果評論所附的單詞或短語已被刪除,我仍然需要顯示評論,儘管該評論可能表明它在當前版本中未附加。

Github有一個功能,它允許成員將註釋添加到源代碼中的特定行。這與我想要做的事情非常接近。但是,我相信Github,評論僅附在該文件的特定版本上。該文件的未來版本不會顯示該評論。

像Microsoft Word這樣的軟件也具有這樣的功能。但我的應用程序將是一個具有用戶間協作功能的web應用程序,因此多個用戶可以對任何給定內容發表評論。

我使用的NoSQL解決方案與CouchDB的或MongoDB中存儲的內容和註釋的斑點考慮。另一個選擇是使用git來維護內容blob和版本,但我不確定我會在哪裏存儲評論信息。

如何最好的模型並存儲這種類型的信息有什麼建議?評論如何引用內容中的單詞或短語?如何在當前版本中最好地知道何時將評論附加到文本中?

回答

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 

當文件的一個新版本已經COMMITED會有一個新斑塊(或可能是一個古老的斑點再次顯示出來,因爲以前的版本文件可能是相同的,因爲文本的添加和刪除)人們可以評論。對象顯然也需要知道正在評論的文本的範圍。