Реализовать hashCode и равно на базовом классе сущности (возможно, используя отражение)? - PullRequest
1 голос
/ 04 марта 2011

Мне интересно, будет ли хорошей практикой иметь hashCode метод equals в базовом классе сущностей, чтобы другие классы сущностей, которые наследуют базовый класс, не должны писать свои собственные hashCode и equals метод?

Сейчас все наши классы сущностей используют apache EqualsBuilder и HashCodeBuilder, мы сравниваем все свойства сущности.

Это становится утомительно, так как мы должны сделать это для всех сущностей, поэтому мне было интересно, можно ли (в базовой сущности) использовать отражение и apache PropertyUtil для зацикливания свойства сущности и сгенерировать правильные equals и hashCode?

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

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

0 голосов
/ 04 марта 2011

Звучит хорошо, если базовый класс действительно может решить, какие поля включить в определение равенства и как их сравнивать.

В целом, существует опасность, что базовые классы могут сравнивать, если они не могут предсказать, чтоПодклассы будут сравниваться и, следовательно, как сравнивать все соответствующие поля.С классами сущностей в типичной ситуации у вас не будет этой проблемы.

0 голосов
/ 04 марта 2011

Проверка на равенство всегда должна производиться в соответствии с потребностями бизнеса. Переход с одного размера подходит всем не обязательно. Во многих кодовых базах, которые я видел, проверка на равенство обусловлена ​​бизнес-требованиями, и тесты подтверждают это.

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