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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам