|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Добрый день, По примеру из книги NHibernate CookBook делаю, В некоторых местах уже используются == и !=, теперь они в классах-потомках Entity. Ну и мысль возникает, не перенести ли это один раз в базовое Entity, ведь тогда все вроде как проще работать должно. Есть подозрения, что == в базовом классе может вызывать какие-нибудь непредвиденные проблемы по сравнению с == в самом классе-потомке, с экземплярами и коллекцией которых мы работаем напрямую (с ними или с их прокси). Плюсы (в этом же и минусы) - можно сравнивать любые два энтити (c одинаковым типом Id, т.к. там дженерик), хотя конечно если они не приводимы друг к другу, то пример из книжки CookBook считает их неравными. Главный плюс, что если в новой Entity решим использовать операцию сравнения, то не надо будет заново все перегружать. Хотя тут вроде минус, что сравнение напрямую (x == y) может привести к загрузке всех полей объекта, а сравнение по Id (x.id == y.id), если там были прокси, не приведет. Вот что планируется сделать. Есть ли тут подводные камни? Принято ли перегружать == прямо у базового Entity? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2011, 17:49 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Идея априори безумная и неочевидная, особенно в разрезе ID. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2011, 18:58 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Собственно что имелось в виду про безумность id? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2011, 21:53 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
OVoronovСобственно что имелось в виду про безумность id? Неочевидность, я ж написал. По всем библейским канонам сравнивать экземпляры классов нужно вовсе не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2011, 14:35 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
NHibernate_User_, не делайте того, что может и не пригодится. Если вам надо сравнивать 1-2 вида объектов, не надо переопределять == для базового класса всех классов. Мне это видится большой миной для будущих поколений. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2011, 17:34 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
NHibernate_User_, отличная идея, ты эт EF просто переопредели сразу щоб не мучиться потом ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2011, 20:20 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Хорошо. А как надо сравнивать экземпляры классов по библейским канонам? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2011, 10:21 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Overriding Equals ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2011, 22:12 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Вообще, 3 варианта я вижу 1) Storage1 == Storage2 (перегруженная операция ==). Может быть перегружено == в самой entity, а может быть в базовом 2) Storage1.Id == Storage2.Id (У нас обычно именно так). Мы никогда не создаем по 2 новых сущности, таким образом, если один и равен 0, то второй точно не равен. 3) Storage1.Equals(Storage2) - неудобно, т.к. громоздкие скобки Никак не пойму, какой конкретно вариант Вы предлагаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2011, 10:27 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Тут обнаружил беду, т.е. при перегрузке Equals по методу из книги Nhibernate CookBook , оказывается, будет каждый раз считываться каждый элемент коллекции!!! Это же страшно неэффективно! На каждый элемент пойдет запрос. Автор NH же писал, что при обращении к this мы получаем внутренний объект (под прокси), а для создания этого объекта NH делает запрос. Я проверял в отладчике. Если просто написать x.id == y.id (или перегрузить == так, чтобы оно обращалось к id), то все в порядке, т.к. для доступа к id NH не нужно создавать внутренний объект у прокси и слать запрос. Если же писать x==y, где реализация == вызывает Equals, или напрямую x.Equals(y), что к тому же и некрасиво и не наглядно, то идет лишний запрос. Как же лучше быть? Сейчас смотрим образцы проектов, сделано везде по-разному. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2011, 12:52 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Собственно, мой начальник уверен, что если == работает, то нет повода его не использовать. Другой вопрос - как его лучше реализовать внутри, сравнением Id или вызовом Equals? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2011, 14:59 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
NHibernate_User_Другой вопрос - как его лучше реализовать внутри, сравнением Id или вызовом Equals? Говорю же, по ID - это неочевидно. Как уже высказались, - мина в чистом поле. P.S. Абстрагируйтесь от задачи и попробуйте помыслить в разрезе ООП (как все адекватные люди): сравнение экземлляров классов через "=". Согласитесь, уже мурашки от такого гавноподхода бегают :) P.S2. То, что дотнет нам даёт такую чудесную возможность как перегрузка операторов- замечательно. Например, для написания калькулятора с комплексными числами и иже. Но фанатизм нужно истреблять на корню. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2011, 22:05 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
То, что по ID неочевидно... имеется в виду сравнение по ID внутри Equals или явное сравнение по ID в программе? авторпомыслить в разрезе ООП (как все адекватные люди): сравнение экземлляров классов через "=". Согласитесь, уже мурашки от такого гавноподхода бегают :) Разве перегрузка операторов не в разрезе ООП? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 17:14 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
NHibernate_User_имеется в виду сравнение по ID внутри Equals или явное сравнение по ID в программе? Имеется ввиду перегрузка оператора для сравнения экземпляров класса. NHibernate_User_Разве перегрузка операторов не в разрезе ООП? Нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2011, 08:33 |
|
Хорошая ли идея - перегрузить операторы == и != в базовом Entity?
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
То, что Equals включает в себя проверку по id, это желание авторов книжки по NHibernate и согласовано с авторами NH. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2011, 11:07 |
|
|
start [/forum/topic.php?fid=17&fpage=43&tid=1350723]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 479ms |
0 / 0 |