Implementação histórico de revisão artigo para aplicação web baseada em Java
-
16-09-2019 - |
Pergunta
Todas as idéias de como melhor i pode implementar histórico de revisão artigo para uma aplicação web baseada em Java e salve-o em AuditLog
StackOverflow já tem a característica de tal permitindo que se possa ver as diferenças de uma versão para outra, quase como clientes SVN.
Este é mais um projeto que pergunta implementação.
Além: Como seria de exibir essas alterações na página web?
Além: Solução proposta ??p>
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
A Hibernate Interceptor interceptar vontade o salvamento processo e uso Castor XML para criar uma cadeia de caracteres XML do antigo objeto.
A classe e id é usado para obter as revisões de um objeto particular.
google-diff-match-patch será utilizado para a criação de arquivos diff HTML
Solução
A melhor solução seria a utilização de um banco de dados ou armazenamento que já suporta as versões, por exemplo Apache Jackrabbit .
Se isso não é uma opção, então você deve decidir onde você deseja armazenar os artigos. No sistema de arquivos? Então faça cada artigo um diretório e salvar as revisões como números (00001, 00002, etc.) e colocar o número da última revisão em um arquivo especial (como current
). Em seguida, você pode rapidamente descobrir quantas versões existem (basta olhar para current
) e ir para a frente e para trás.
Se você usar um banco de dados, em seguida, adicione um campo número da versão para a mesa de artigo e adicionar uma segunda mesa ou uma bandeira que diz qual a versão atual é. Você também pode selecionar com max(version)
mas essas construções SQL tendem a ser muito feio e confuso. É muito mais simples para salvar essa informação em outro lugar.
[EDIT] Para gerar diffs, olhar para este projeto: google-diff -match-remendo
Outras dicas
Gostaria de usar um VCS existente (por exemplo, SVN) sob o capô. Lá você tem o histórico de revisão -. Tudo o que resta a fazer é uma interface de seu aplicativo para o VCS