|
|
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть такая структура классов: Код: java 1. 2. 3. 4. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При вызове service.realAction(doc); соответственно выводится "0". А хочется, чтобы выводилось "2". Как можно поменять код, чтобы в realAction(Doc doc) дергался метод action(Doc2 doc2), а не action(Doc doc). Желательно красиво, без instance of. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 18:14 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
Классы Doc и наследники крайне желательно не менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 18:21 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
service.realAction((Doc2) doc); не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 18:26 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
new Doc2() чисто для примера. Сам объект приходит из вне и неизвестно какого он конкретно типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 18:29 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
PSVM.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. Service.java Код: java 1. 2. 3. 4. 5. 6. Doc.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Doc1.java Код: java 1. 2. 3. 4. 5. 6. Doc2.java Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 19:50 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
PSVM.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. Service.java Код: java 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. Action.java, Doc.java, Doc1.java, Doc2.java Код: java 1. 2. 3. Код: java 1. Код: java 1. Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 19:56 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
Можно visitor вкорячить. В приложении из полутора классов даже будет интересно смотреться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 20:11 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
IEEE, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 21:21 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
Doc-и - это хибернейтовские сущности(и их много), неохото в них логику пихать. Эх, скорее всего придется instance of-ами или хэшмапом, хотя и не по фэншую это все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 21:22 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
Usman, Тоже вариант) Когда писал вопрос, думал есть какой-то красивый через полиморфизм какой-нибудь. Остальные варианты будут работать, но на душе не спокойно от них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 21:25 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
IEEEдумал есть какой-то красивый через полиморфизм какой-нибудь.Чтобы был полиморфизм прийдётся менять код классов Doc. Но, как вы сами сказали, IEEEDoc-и - это хибернейтовские сущности(и их много), неохото в них логику пихать.Так что, только instanceof и остаётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 16:17 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
IEEEDoc-и - это хибернейтовские сущности(и их много), неохото в них логику пихать. Эх, скорее всего придется instance of-ами или хэшмапом, хотя и не по фэншую это все. У вас это выльется во все прелести Anemic Domain Model. В чем проблема логики в сущностях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 16:25 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
For AllНо, как вы сами сказали, IEEEDoc-и - это хибернейтовские сущности(и их много), неохото в них логику пихать.Так что, только instanceof и остаётся. Ну, можно завести реестр класса на Action. Эдакую свою таблицу виртуальных методов. Но, при всех прочих, полиморфизм самое простое решение. Другое дело, если Action у нас сложная бизнес транзакция. Тогда проще реализовать что-то вроде doc.getAction().perform(); Чтобы не добавлять в сущность связей с разными сервисами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 16:33 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУ вас это выльется во все прелести Anemic Domain Model. В чем проблема логики в сущностях?Может это не так уж и плохо ?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 01:53 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
WGAМожет это не так уж и плохо ?.. Я тоже пока не разобрался был такого же мнения. Если код проще всего держать в сущности. Если код при этом не добавляет в сущности жестких новых зависимостей. То код должен быть в этой сущности. Самый простой критерий - метод сущности должен оперировать только полями и свойствами сущности. Если вынос кода в Service приходит к необходимости исполь instanceof. Если код усложняется только потому что он находится не в сущности, а в Service, то это явные признаки болезни Anemic Model. Во-первых это не так просто разбивать методы на код Service и код сущности. Особенно если в этом пока нет необходимости, то и делать никто не будет. Пишешь себе колбасу в Service и не думаешь о том что можно же часть алгоритма в сущность перенести. Тогда код будет проще переиспользовать. Круто, если его переиспользовать не придется. А вот когда придется, тогда мозги и встанут на место. Если только лень и копипаст своё не возьмут. Во-вторых проблема лишних зависимостей легко решается введением нового абстрактного слоя. Например, какак я предлагал выше - Action. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 09:24 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЯ тоже пока не разобрался был такого же мнения... Я пока не разобрался окончательного, поэтому мнения нет... Косвенно в пользу anemic model говорит то, что в основных платформах (JEE, Spring) не было реализован DI в сущности. Хотя в JEE7, вроде, появилось, но все же... Как бы все указывает, на то, какая роль отводится для Entity. Ни в коем случае не хочу разводить холивар. ) Просто прочитал тот блог буквально минут за 15 до прочтения sql.ru. Подумал, возможно будет интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 00:46 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
WGAКосвенно в пользу anemic model говорит то, что в основных платформах (JEE, Spring) не было реализован DI в сущности. Вскрывается полное непонимание. Следи за руками. То что Entity не имеет смысла использовать в DI, так как у них относительно короткий жизненый цикл, ещё не значит, что иметь какую-либо логику в Entity это "плохо", как утверждается выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 09:30 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
BlazkowiczIEEEDoc-и - это хибернейтовские сущности(и их много), неохото в них логику пихать. Эх, скорее всего придется instance of-ами или хэшмапом, хотя и не по фэншую это все. У вас это выльется во все прелести Anemic Domain Model. В чем проблема логики в сущностях? В этой логике надо дергать другие спринговые сервисы. Май бэд, наверное, плохо описал задачу. В итоге на каждый Код: java 1. 2. 3. был создан отдельный спринговый компонент, унаследованный от generic-интерфейса. А в сервисе, который дергает service.realAction(doc); находится нужный бин и дергается у него action. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 11:24 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
IEEEВ этой логике надо дергать другие спринговые сервисы. Поэтому логику надо аккуратно разделить, чтобы полиморфизм остался в сущностях, а сервисы изолировались от сущностей отдельным слоём. IEEEМай бэд, наверное, плохо описал задачу. В итоге на каждый Не. Всё понятно. На самом деле для Java нет простого однозначного решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 11:28 |
|
||
|
Полиморфизм
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВскрывается полное непонимание. Следи за руками...Возможно и непонимание... ) Просто мне доводилось видеть проекты, основанные на разных подходах. Когда увижу образчик proper Domain Model и скажу "всегда буду делать так же" - тогда и сменю мнение. Из двух зол приходится выбирать меньшее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 15:33 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38682353&tid=2126950]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
214ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 567ms |

| 0 / 0 |
