Implementazione della cronologia delle revisioni degli articoli per l'applicazione Web basata su Java

StackOverflow https://stackoverflow.com/questions/1673709

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top