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

War es hilfreich?

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

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top