关于如何最好地实现基于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
hibernateinterceptor将截获保存过程,并使用CastorXML创建旧对象的xml字符串。
类和id用于获取特定对象的修订。
googlediff匹配补丁将用于创建html diff文件
2条答案
按热度按时间s4chpxco1#
最好的解决方案是使用已经支持版本的数据库或存储,例如apachejackrabbit。
如果这不是一个选择,那么你必须决定你想把文章存放在哪里。在文件系统上?然后把每一篇文章做成一个目录,把修订版保存为数字(00001、00002等),把上一次修订版的数字放在一个特殊的文件中(如
current
). 然后您可以很快找到有多少个版本(只需查看current
)向前和向后。如果使用数据库,则向项目表中添加一个版本号字段,并添加第二个表或一个表示当前版本的标志。您也可以选择
max(version)
但是那些sql构造往往非常难看和混乱。把这些信息保存在别处要简单得多。[编辑]要生成差异,请看这个项目:google diff match patch
cvxl0en22#
我会在引擎盖下使用现有的风投(例如,svn)。在这里你有修订历史-所有剩下来做的是一个接口,从你的应用程序到风投。