Нужны ли hashCode и equals в Axon для агрегатов и сообщений?
Необходимо ли добавлять (переопределять) hashCode и методы equals к агрегатам и сообщениям Axon? Анализ в SonarQube показывает, что они не используются при выполнении стандартных операций Axon с этими объектами (в сквозных тестах). Более того, во время отладки методы equals и hashCode, похоже, также не достигаются.
1 ответ
Правильного наблюдения нет у Вадима. С точки зрения Аксона, есть только одно место, куда вы должны добавить equals()
функция, которая является Агрегатным Членом, который содержится в списке на Агрегате (Корень).
axon-test
модуля FixtureConfiguration
будет соответствовать Агрегату до обработки команды и после нее, чтобы гарантировать, что состояние не было изменено в обработчике команды. Аксон использует глубокое сравнение полей, если только equals()
метод предоставляется. Список объектов будет неправильно соответствовать объектам, так как ссылка на объект будет использоваться, если нет equals()
предоставлен. Таким образом, требуется, чтобы ваши "Совокупные члены", которые вы помещаете в список / набор / карту, имели реализацию equals()
функция.
Обратите внимание, что это на самом деле не идеально. Сущности не должны быть взаимозаменяемыми, так как они не определяются в основном своими атрибутами (такими как объекты-значения и сообщения), а скорее их идентичностью и потоком непрерывности. Это известная оговорка, которая axon-test
Модуль планируется справиться с одним днем.
Итак, чтобы ответить на ваш вопрос вкратце: тестировать оба варианта более чем справедливо, но в реальной системе это не нужно.