Zur Durchführung von Artikeln Revisionshistorie für Java-basierte Web-Anwendung
-
16-09-2019 - |
Frage
Alle Ideen, wie am besten Ich kann Artikel Revisionsverlauf für eine Java-basierte Web-Anwendung implementieren und in auditlog speichern
Stackoverflow hat bereits ein solches Feature so dass man die Unterschiede von einer Version zur anderen, um zu sehen, fast wie SVN-Clients.
Dies ist eher ein Design als Implementierung Frage.
Außerdem: Wie würde man diese Änderungen auf der Web-Seite angezeigt werden?
Zusätzlich: Vorgeschlagene Lösung
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 abfängt der Speichervorgang und verwenden Castor XML eine XML-Zeichenfolge von der erstellen altes Objekt.
Die Klasse und ID wird dazu verwendet, die Revisionen eines bestimmten Objekts zu erhalten.
google-diff-match-patch wird für die Erstellung von HTML-diff-Dateien verwendet werden
Lösung
Die beste Lösung wäre, eine Datenbank oder Speicher zu verwenden, die bereits Versionen unterstützt, zum Beispiel Apache Jackrabbit .
Wenn das keine Option ist, dann müssen Sie entscheiden, wo Sie die Artikel speichern möchten. Auf dem Dateisystem? Dann wird jeder Artikel machen ein Verzeichnis und speichern Sie die Änderungen als Zahlen (00001, 00002, etc.) und legen Sie die Nummer der letzten Revision in einer speziellen Datei (wie current
). Dann können Sie schnell herausfinden, wie viele Versionen gibt es (nur schauen in current
) und gehen nach vorn und zurück.
Wenn Sie eine Datenbank verwenden, dann eine Versionsnummer Feld zu dem Artikel Tabelle hinzufügen und eine zweite Tabelle oder ein Flag hinzuzufügen, die sagt, welche die aktuelle Version ist. Sie könnten auch mit max(version)
wählen, aber diese SQL-Konstrukte sind in der Regel ziemlich hässlich und verwirrend sein. Es ist viel einfacher, diese Informationen an anderer Stelle zu speichern.
[EDIT] diffs zu erzeugen, an diesem Projekt aussehen: google-diff -match-Patch
Andere Tipps
würde ich eine bestehende VCS (zB SVN) unter der Haube verwenden. Dort haben Sie die Revisionsgeschichte - alles, was übrig geblieben ist eine Schnittstelle von Ihrer App auf die VCS zu machen, ist
.