Нужны ли hashCode и equals в Axon для агрегатов и сообщений? - PullRequest
0 голосов
/ 16 января 2019

Необходимо ли добавлять (переопределять) hashCode и методы equals к агрегатам и сообщениям Axon? Анализ в SonarQube показывает, что они не используются при выполнении стандартных операций Axon с этими объектами (в сквозных тестах). Более того, во время отладки методы equals и hashCode, по-видимому, также не достигаются.

1 Ответ

0 голосов
/ 17 января 2019

Правильного наблюдения нет, Вадим. С точки зрения Аксона, есть только одно место, где вам нужно добавить функцию equals(), которая является Агрегатным членом, который содержится в списке на Агрегате (Root).

FixtureConfiguration модуля axon-test будет сопоставлять Агрегат до обработки команды и после нее, чтобы гарантировать, что состояние в обработчике команд не было изменено. Аксон использует глубокое сравнение полей, если не предоставлен метод equals(). Список объектов будет неправильно соответствовать объектам, так как ссылка на объект будет использоваться, если не указано equals(). Таким образом, требуется, чтобы ваши «Совокупные участники», которые вы помещаете в список / набор / карту, имели реализацию функции equals().

Обратите внимание, что это на самом деле не идеально. Сущности не должны быть взаимозаменяемыми, так как они не определяются в основном своими атрибутами (такими как объекты-значения и сообщения), а скорее их идентичностью и потоком непрерывности. Это известное предупреждение, с которым модуль axon-test планирует справиться за один день.

Итак, чтобы ответить на ваш вопрос вкратце: Для тестирования наличие обоих более чем справедливо, но в реальной системе это не нужно.

...