Comments 15
Это не то же самое что Javers? https://javers.org/
У меня была задача записывать аудит изменений в БД
Выбор был между Javers и Envers
Javers как-то резво развивался, плюс автор отвечал
Плюс поддержка монги
Выбрал его
Раз вы пользовались... как по вашему, отличается функциональность моего "велосипеда" от Javers? И в какую сторону, если есть отличия, в лучшую или худшую?)
Javers имеет 1.4k звёзд на гитхабе
И несколько лет развития
Согласитесь глупый вопрос
Это понятно, что масштабы несопоставимы. Это вообще полноценный фреймворк (а не написанная за неделю либа), как я понимаю, в котором куча вещей помимо чекинга изменений.
Но если только в разрезе функции проверки изменений и использования? Ограничиваясь чисто этим узким функционалом.
Понимаете, то что вы решили написать сами что-то своё.это вам плюс.
Но то что изобрели велосипед не промониторив мир, это минус
Например вы прочитали книгу старую книгу Beginning Java EE 7
И решите писать свое. DI
Согласитесь будет смешно.
Рядом гиганты spring, quarkus, micronaut
И куча light библиотек
Как нет проект , попробовать, я согласен, опыт
Но не для прода.
Тем более ушли времена надеюсь, когда для Джаспера ,мне приходилось подключать itext монстра)
Не, ну промониторить-то я пытался, только на глаза тот же Javers так и не попался) Видать, плохо упрашивал Гугл)
А так был искренне убежден, что делаю что-то новое, хоть и пока "на коленке") Эх, суровая реальность)
Cейчас хочу определиться с возможным дальнейшим планом развития. Может, есть все же что-то, какая-то важная мелочь/мелочи, которых не хватает в готовых решениях подобного плана (несмотря на их бОльший масштаб - порой у разрабов до мелочей не доходят руки, даже до важных :)) и которые у меня имеются/которые буду готов реализовать. Например, в том же Javers, видимо, для "дельты" по коллекциями какое-то время нельзя было получить старый и новый объекты (https://github.com/javers/javers/issues/1094). Что-то в этом роде.
Если их добавить - то как такая "light"-либа, думаю, будет вполне себе и даже в мавен централ залить будет не стыдно.
Вместо гугла, уже есть более современные средства поиска. Тот же чатгпт, сходу выдал несколько готовых решений:
Java Object Diff (https://github.com/SQiShER/java-object-diff)
Gson/JsonDiff
Javers
Apache Commons Lang (EqualsBuilder и DiffBuilder)
Помимо, собственно поиска, можно закинуть такому чату ваше решение и попросить его сравнить, найти отличия, составить отчёт/сводку.
[мысли вслух] можно черезвычайно гибкие компараторы делать
Ну вот. ) Хотел поделиться аналогичным опытом, но смысла уже нет - вы меня опередили. И это хорошо. Тот самый код я не имею возможности опубликовать ни по техническим, ни по юридическим причинам, мне бы пришлось его пересочинить.
Десять лет назад я создал очень похожий инструмент. Javers тогда уже существовал, но его версия была меньше чем 1.0.0, то есть не production ready.
Изначально назначение у инструмента было другое - обеспечение конкурентной работы.
Объект не сохранялся в БД напрямую. Вместо этого под распределенной блокировкой вычислялся дифф между исходной и измененной версией объекта, и далее дифф применялся к актуальной версии объекта, которая и сохранялась в БД. Сохранялись в БД и диффы, которые в дальнейшем можно было использовать при расследовании разного рода инцидентов, а так же для восстановления исторических версий объекта, которые могли быть нужны для разного рода миграций.
Таким образом, несколько юзеров могли одновременно отредактировать разные поля, одновременно сохранить объект, и ничьи изменения не терялись в результате гонки.
Опытный разработчик может возразить, что правильный способ обеспечения конкурентной работы - это команды, а не вот это вот всё поверх CRUD'а, и я с ним соглашусь.
Наверное каждый разработчик в своей жизни пишет велосипед, а потом…хоба…и обнаруживает на рынке что-то готовое, намного функциональнее. У меня тоже так было. Писал в свое время для себя аналог Jooq или QueryDSL, но как потом оказалось эти инструменты уже существовали. Ну и ладно, сказал я себе. Зато хороший опыт написания фреймворка с нуля. Выбрал я, естественно, готовые решения
Java. Мое решение для поиска изменений между двумя объектами. ChangeChecker