powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как посчитать хеш класса ?
25 сообщений из 72, страница 2 из 3
Как посчитать хеш класса ?
    #40048982
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton
пропущено...

Начинается пятница.

Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду.
И в фазе компилляции знаете что у вас есть.

Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле.
Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно.
Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо
включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо
и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню.

Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью
указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО.

По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный
алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс.

По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд
на задачу с точки зрения бинов а не pure Java.


Согласен - мысли такие же...

По поводу "трекать":

Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать.

Миграция исторических данных остаётся за скобками этого топика.

Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048993
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp
пропущено...

Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов.
Ещё?


Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения.
а кто против?
Я злой следователь. Mayton добрый.
Работай!
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048998
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

авторМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать.
Да. Изменив классы вы потом не десиреализуете. Не родите обратно.
Тупик.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048999
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
>чтобы юзер смог пвоторить своё действие из прошлогоМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого....
==== без примера не катит. Зачем в бд пихать сам класс а не ДЕЙСТВИЕ чтобы его повторить?)))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049007
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner
пропущено...


Согласен - мысли такие же...

По поводу "трекать":

Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать.

Миграция исторических данных остаётся за скобками этого топика.

Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL?


Это некий снимок состояния структуры объектов. Это сериализация.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049012
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Про это не слышал. Понятно.
интерфейс Serializable
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049017
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner

Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют.
Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии.
+Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно.
Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб
просто забыл.

Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом
который юзал это.

Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке.

Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас
требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее.
Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[]
одной функцией.

А в Cryo - можно.

P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть
одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно
у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049020
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner

Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют.
Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии.
+Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно.
Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб
просто забыл.

Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом
который юзал это.

Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке.

Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас
требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее.
Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[]
одной функцией.

А в Cryo - можно.

P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть
одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно
у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс.



Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно.
Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз.

Да и вызываться это будет один раз при старте аппликейшена. То бишь грешить на перформанс тут не надо.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049021
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос как сериализовать не стоит.

Стоит вопрос как трекнуть изменения в структуре классов( такие как добавление поля, удаление поля, переименование поля)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049023
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс лежит в исходнике. Считайте MD5 исходника.

Или смотрите там git diff ... или git log ...

Чем не вариант?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049024
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Класс лежит в исходнике. Считайте MD5 исходника.

Или смотрите там git diff ... или git log ...

Чем не вариант?
он просто Упрямый)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049028
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне напомнило. Когда работали в *телекомах для ГТС у нас были услуги для населения. Бизнес-факты.
Например один чел (абонент А) позвонил абоненту (Б) и они говорили 18 минут. Потом формула тарификации
поменялась (например до 2004.01.02 была одна формула) и после этой точки - другая.

При расчете платежек населению наша логика учитывала эту формулу и все услуги до 2004.01.02 считались
так. А после этого - по другому. Потом формула могла еще 100 раз поменятся. И в Oracle автоматом
компилировалась PLSQL функция что-то типа FUNC_2004_xxxx и бизнес логика просто брала эту функцию.

Это было в определённой степени полиморфизмом для Оракла. Потому-что другие системы для телефонии
и даже такое не умели делать.

Разумеется процесс создания таких периодов и формул был ручной. Был отдел бизнесов которые этим управляли.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049031
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Класс лежит в исходнике. Считайте MD5 исходника.

Или смотрите там git diff ... или git log ...

Чем не вариант?


MD5 исходника вариант кстати, https://stackoverflow.com/a/2435932/2674303

Но опять же это на уровне одного класса. У нас классы каждый в своём файле лежит и как-то не хочется трекать изменения в методах.
При таком варике проще рефлекшеном гулять.


Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049036
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На рефлекторе вместо этого

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;



будет скорее всего такое

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<Object> otherClassList = ...;



Ты ОК с таким допущением?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049040
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
На рефлекторе вместо этого

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;



будет скорее всего такое

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<Object> otherClassList = ...;



Ты ОК с таким допущением?


Кстати да, это проблема.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049043
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
>Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял.
А если класс ещё не создан?)))))))))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049044
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton
На рефлекторе вместо этого

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;




будет скорее всего такое

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<Object> otherClassList = ...;




Ты ОК с таким допущением?


Кстати да, это проблема.

Идите гуляйте с такими целями и задачами.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049047
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

MD5 кстати не покатит, потому, что родитель не будут учитываться
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049048
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton,

MD5 кстати не покатит, потому, что родитель не будут учитываться

Почему?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049050
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот будет такой input:

Код: jscript
1.
2.
3.
4.
5.
6.
7.
{ "com.corporation.questioner.MyClass" : {
   extends : BasicClass,
   implements : [ "Interface1"],
   fields : [
      { type : "int", name : "field1"},
      { type : "List", name : "otherClassList"}
   ]
}


Вот считай его MD5 и тут всё учтено что связано с сигнатурами.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049056
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Вот будет такой input:

Код: jscript
1.
2.
3.
4.
5.
6.
7.
{ "com.corporation.questioner.MyClass" : {
   extends : BasicClass,
   implements : [ "Interface1"],
   fields : [
      { type : "int", name : "field1"},
      { type : "List", name : "otherClassList"}
   ]
}


Вот считай его MD5 и тут всё учтено что связано с сигнатурами.


а родитель родителя?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049057
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Добавили поле в родителя, у наследника это поле тоже есть... может понадобиться сериализовать
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049058
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим.
А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049061
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,
Задачу он с потолка взял.
Поработали прогеры. Потом в рантайме рожают классы из хранилища а в ответ Райзе. Код поменялся.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049062
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим.
А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны


Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта.

JsonSchema это другое
...
Рейтинг: 0 / 0
25 сообщений из 72, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как посчитать хеш класса ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]