Implementazione della cronologia delle revisioni degli articoli per l'applicazione Web basata su Java
-
16-09-2019 - |
Domanda
Qualche idea su come migliore posso implementare la cronologia delle revisioni degli articoli per un'applicazione Web basata su Java e salvarla in AuditLog
StackOverflow dispone già di una funzionalità del genere che consente di vedere le differenze da una versione all'altra, quasi come i client SVN.
Questa è più una questione di progettazione che di implementazione.
aggiunta:Come si potrebbero visualizzare questi cambiamenti sulla pagina web?
aggiunta:La soluzione proposta
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
UN Ibernazione Intercettore Intercetterà il processo di salvataggio e utilizzerà XML di ricino per creare una stringa XML del vecchio oggetto.
La classe e l'id vengono utilizzati per ottenere le revisioni di un particolare oggetto.
google-diff-match-patch verrà utilizzato per creare file diff HTML
Soluzione
La soluzione migliore sarebbe, ad esempio, utilizzare un database o un archivio che supporti già le versioni Lepre apache.
Se questa non è un'opzione, devi decidere dove vuoi archiviare gli articoli.Sul file system?Quindi trasforma ogni articolo in una directory e salva le revisioni come numeri (00001, 00002, ecc.) e inserisci il numero dell'ultima revisione in un file speciale (come current
).Quindi puoi scoprire rapidamente quante versioni ci sono (basta guardare dentro current
) e andare avanti e indietro.
Se utilizzi un database, aggiungi un campo del numero di versione alla tabella degli articoli e aggiungi una seconda tabella o un flag che indica quale è la versione corrente.Puoi anche selezionare con max(version)
ma quei costrutti SQL tendono ad essere piuttosto brutti e confusi.È molto più semplice salvare queste informazioni altrove.
[EDIT] Per generare differenze, guarda questo progetto: google-diff-match-patch
Altri suggerimenti
Utilizzerei un VCS esistente (ad esempio SVN) sotto il cofano.Ecco la cronologia delle revisioni: tutto ciò che resta da fare è un'interfaccia dalla tua app al VCS.