为基于Java的Web应用程序实现文章修订历史

时间:2009-11-04 13:23:15

标签: java revision database-versioning

关于如何最佳的任何想法我可以为基于Java的Web应用程序实现文章修订历史并将其保存在AuditLog中

StackOverflow已经具有这样的功能,允许人们看到从一个版本到另一个版本的差异,就像SVN客户端一样。

这更像是设计而不是实施问题。

此外:如何在网页上显示这些更改?

补充:建议的解决方案

Article
--------------------------------
    Integer id
    String title
    String body
    List<Tag> tags
    AppUser createdBy
    Date createdDate

AuditLog
--------------------------------
    Integer id
    Integer objectId
    Operation operation // enum with UPDATE and DELETE. I won't audit an insert
    Date createdDate
    AppUser createdBy
    String class
    String revisionXML
    String comment

Hibernate Interceptor将拦截 保存过程并使用Castor XML创建旧对象的XML字符串。

class和id用于获取特定对象的修订版。

google-diff-match-patch将用于创建HTML差异文件

2 个答案:

答案 0 :(得分:3)

最佳解决方案是使用已支持版本的数据库或存储,例如Apache Jackrabbit

如果这不是一个选项,那么您必须决定要存储文章的位置。在文件系统上?然后将每篇文章作为目录并将修订版本保存为数字(00001,00002等),并将最后修订版本的编号放在特殊文件中(如current)。然后,您可以快速找到有多少版本(只需查看current)并前进和后退。

如果使用数据库,则在文章表中添加版本号字段,并添加第二个表或标记,说明当前版本是哪一个。您也可以使用max(version)进行选择,但这些SQL结构往往非常丑陋且令人困惑。将这些信息保存在其他地方要简单得多。

[编辑]要生成差异,请查看此项目:google-diff-match-patch

答案 1 :(得分:1)

我会使用现有的VCS(例如,SVN)。在那里你有修订历史记录 - 剩下要做的就是从你的应用程序到VCS的界面。