Различия между двумя объектами с помощью отражения Java: как? - PullRequest
7 голосов
/ 30 марта 2010

Для журнала аудита мне нужно знать различия между двумя объектами.

Эти объекты могут содержать другие объекты, список, набор объектов и, следовательно, необходимые различия могут быть рекурсивными, если это необходимо.

Существует ли API, использующий отражение (или другое), уже для этого?

Заранее спасибо.

Привет

Ответы [ 2 ]

2 голосов
/ 25 апреля 2012

Я написал каркас, который делает именно то, что вы искали. Он генерирует график из любого типа объекта, независимо от того, насколько глубоко он вложенный, и позволяет вам отслеживать изменения у посетителей. Я уже занимался такими вещами, как генерация журналов изменений, автоматическое объединение и визуализация изменений с ним, и до сих пор это меня не подводило.

Полагаю, я опоздал на несколько лет, чтобы помочь в вашем конкретном случае, но для завершения вот ссылка на проект: https://github.com/SQiShER/java-object-diff

2 голосов
/ 30 марта 2010

Это довольно сложная проблема, чтобы попытаться решить ее в общем. Вы можете подумать о соединении шаблона Visitor, который позволяет добавить функциональность к графу объектов, с шаблоном Chain of Responsibility, который позволяет разделить ответственность за выполнение задачи на несколько объектов, а затем динамически направлять запросы к правый обработчик.

Если вы это сделаете, вы сможете сгенерировать простую, специфичную логику дифференцирования для каждого типа без единого массивного класса, который обрабатывает все ваши задачи дифференциации. Также было бы легко добавить обработчики в дерево.

Самое приятное то, что у вас все еще может быть ссылка в цепочке ответственности для "плоских" объектов (объектов, которые не являются коллекциями и в основном имеют свойства), и именно в этом случае отражение поможет вам в любом случае. Если в вашем «всеобъемлющем» случае используется простое сравнение на основе отражений, а в «особых» случаях используются такие вещи, как списки, словари и наборы, то у вас будет гибкое, поддерживаемое и недорогое решение.

Для получения дополнительной информации:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...