3

关于如何最好地为基于 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 diff 文件

4

2 回答 2

3

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

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

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

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

于 2009-11-04T13:29:52.253 回答
1

我会在后台使用现有的 VCS(例如 SVN)。在那里你有修订历史 - 剩下要做的就是从你的应用程序到 VCS 的接口。

于 2009-11-04T13:30:54.657 回答