2010-03-30 2 views
7

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

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

Есть ли api, используя отражение (или другое) для этого?

Заранее благодарен.

С уважением

+0

Смотрите также http://stackoverflow.com/questions/578209/общего алгоритм-в-генераторный-а-Diff-оф-полей-в-два-бобов. –

+0

В Commons BeanUtils есть новое предложение: http://issues.apache.org/jira/browse/BEANUTILS-304 Непонятно, когда это будет окончательно. – BalusC

ответ

2

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

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

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

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

2

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

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

Смежные вопросы