Реализация журнала изменений статей для веб-приложения на базе Java
-
16-09-2019 - |
Вопрос
Есть какие-нибудь идеи о том, как Лучшие я могу реализовать журнал изменений статей для веб-приложения на базе Java и сохранить его в AuditLog
В StackOverflow уже есть такая функция, позволяющая видеть различия от одной версии к другой, почти как в SVN-клиентах.
Это скорее вопрос дизайна, чем реализации.
дополнение:Как бы отобразить эти изменения на веб-странице?
дополнение:Предлагаемое решение
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 Впадать в спящий режим Перехватчик перехватит процесс сохранения и использования Рицинус XML чтобы создать XML-строку старого объекта.
Класс и идентификатор используются для получения изменений определенного объекта.
google-diff-match-исправление будет использоваться для создания HTML-файлов различий
Решение
Лучшим решением было бы использовать базу данных или хранилище, которые уже поддерживают версии, например Кролик - Апач.
Если это невозможно, то вы должны решить, где вы хотите хранить статьи.В файловой системе?Затем создайте для каждой статьи каталог и сохраните ревизии в виде номеров (00001, 00002 и т.д.) И поместите номер последней ревизии в специальный файл (например current
).Тогда вы сможете быстро узнать, сколько существует версий (просто загляните в current
) и ходите вперед и назад.
Если вы используете базу данных, добавьте поле с номером версии в таблицу article и добавьте вторую таблицу или флаг, указывающий, какая из них является текущей версией.Вы также можете выбрать с помощью max(version)
но эти SQL-конструкции, как правило, довольно уродливы и сбивают с толку.Гораздо проще сохранить эту информацию в другом месте.
[РЕДАКТИРОВАТЬ] Чтобы сгенерировать различия, посмотрите на этот проект: google-diff-match-исправление
Другие советы
Я бы использовал существующий VCS (например, SVN) под капотом.Там у вас есть история изменений - все, что осталось создать, это интерфейс вашего приложения к VCS.