|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton пропущено... Начинается пятница. Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду. И в фазе компилляции знаете что у вас есть. Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле. Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно. Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню. Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО. По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс. По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд на задачу с точки зрения бинов а не pure Java. Согласен - мысли такие же... По поводу "трекать": Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Миграция исторических данных остаётся за скобками этого топика. Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:32 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp пропущено... Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов. Ещё? Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения. Я злой следователь. Mayton добрый. Работай! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:52 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, авторМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Да. Изменив классы вы потом не десиреализуете. Не родите обратно. Тупик. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:56 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, >чтобы юзер смог пвоторить своё действие из прошлогоМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого.... ==== без примера не катит. Зачем в бд пихать сам класс а не ДЕЙСТВИЕ чтобы его повторить?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:59 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner пропущено... Согласен - мысли такие же... По поводу "трекать": Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Миграция исторических данных остаётся за скобками этого топика. Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL? Это некий снимок состояния структуры объектов. Это сериализация. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:07 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, Про это не слышал. Понятно. интерфейс Serializable ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:11 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют. Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии. +Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно. Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб просто забыл. Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом который юзал это. Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке. Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее. Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[] одной функцией. А в Cryo - можно. P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:20 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют. Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии. +Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно. Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб просто забыл. Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом который юзал это. Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке. Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее. Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[] одной функцией. А в Cryo - можно. P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс. Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно. Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз. Да и вызываться это будет один раз при старте аппликейшена. То бишь грешить на перформанс тут не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:29 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Вопрос как сериализовать не стоит. Стоит вопрос как трекнуть изменения в структуре классов( такие как добавление поля, удаление поля, переименование поля) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:32 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Класс лежит в исходнике. Считайте MD5 исходника. Или смотрите там git diff ... или git log ... Чем не вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:46 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton Класс лежит в исходнике. Считайте MD5 исходника. Или смотрите там git diff ... или git log ... Чем не вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:47 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Мне напомнило. Когда работали в *телекомах для ГТС у нас были услуги для населения. Бизнес-факты. Например один чел (абонент А) позвонил абоненту (Б) и они говорили 18 минут. Потом формула тарификации поменялась (например до 2004.01.02 была одна формула) и после этой точки - другая. При расчете платежек населению наша логика учитывала эту формулу и все услуги до 2004.01.02 считались так. А после этого - по другому. Потом формула могла еще 100 раз поменятся. И в Oracle автоматом компилировалась PLSQL функция что-то типа FUNC_2004_xxxx и бизнес логика просто брала эту функцию. Это было в определённой степени полиморфизмом для Оракла. Потому-что другие системы для телефонии и даже такое не умели делать. Разумеется процесс создания таких периодов и формул был ручной. Был отдел бизнесов которые этим управляли. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:04 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton Класс лежит в исходнике. Считайте MD5 исходника. Или смотрите там git diff ... или git log ... Чем не вариант? MD5 исходника вариант кстати, https://stackoverflow.com/a/2435932/2674303 Но опять же это на уровне одного класса. У нас классы каждый в своём файле лежит и как-то не хочется трекать изменения в методах. При таком варике проще рефлекшеном гулять. Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:13 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
На рефлекторе вместо этого Код: java 1. 2. 3.
будет скорее всего такое Код: java 1. 2. 3.
Ты ОК с таким допущением? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:20 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton На рефлекторе вместо этого Код: java 1. 2. 3.
будет скорее всего такое Код: java 1. 2. 3.
Ты ОК с таким допущением? Кстати да, это проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:32 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, >Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял. А если класс ещё не создан?))))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:34 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton На рефлекторе вместо этого Код: java 1. 2. 3.
будет скорее всего такое Код: java 1. 2. 3.
Ты ОК с таким допущением? Кстати да, это проблема. Идите гуляйте с такими целями и задачами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:35 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, MD5 кстати не покатит, потому, что родитель не будут учитываться ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:43 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton, MD5 кстати не покатит, потому, что родитель не будут учитываться Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:44 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Вот будет такой input: Код: jscript 1. 2. 3. 4. 5. 6. 7.
Вот считай его MD5 и тут всё учтено что связано с сигнатурами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:48 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton Вот будет такой input: Код: jscript 1. 2. 3. 4. 5. 6. 7.
Вот считай его MD5 и тут всё учтено что связано с сигнатурами. а родитель родителя? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:00 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, Добавили поле в родителя, у наследника это поле тоже есть... может понадобиться сериализовать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:01 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим. А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:03 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
SpringMan, Задачу он с потолка взял. Поработали прогеры. Потом в рантайме рожают классы из хранилища а в ответ Райзе. Код поменялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:10 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
SpringMan Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим. А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта. JsonSchema это другое ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:13 |
|
|
start [/forum/topic.php?fid=59&msg=40049023&tid=2120515]: |
0ms |
get settings: |
25ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
507ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 929ms |
0 / 0 |