|
|
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Подскажите правильность такого решения. У меня есть точка подключения вебсокета на Java (сервер). В нем реализованы методы onOpen, onMessage, onClose и onError. Речь пойдет о методе onMessage. Мне не хочется набивать этот метод свичем который будет огромным для всех сообщений которые возможны. Я сделал такую вот штуку (использовал внутренний не статический класс для обработки сообщений) Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. верно ли так делать? Может есть более элегантный способ обработки сообщений? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 11:39 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 11:53 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:04 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Прямо в документации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:05 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
я бы сделал так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Как конкретно создавать экземпляры классов внутри "фабрики" - дело такое. Самый простой и топорный подход конечно через switch. Eсли объекты простые, то табличный метод Код: java 1. 2. 3. 4. 5. 6. 7. 8. более элегантные (на мой вкус) варианты это создание через механизм dependency injection. особенно если объекты сложные, со своими зависимостями и т.д. В зависимости от кол-ва классов и сложности задачи можно промежуточные варианты использовать. Нет смысла городить огород ради например 3х примитивных классов с конструктором без параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:07 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:08 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПрямо в документации? посмотрел. Суть не поменяется. Я сделаю вот так: Код: java 1. 2. 3. 4. 5. 6. Но чем это будет отличаться от этого? Код: java 1. 2. 3. 4. В первом случае свитч все равно будет, как и во втором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:08 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Tsyklop...Мне не хочется набивать этот метод свичем который будет огромным для всех сообщений которые возможны.... AFAIK В "нормальных языках программирование" ( TM ) есть ссылки на методы, т.ч. в них можно делать массив/HashMap и через него вызывать нужные методы. В "старой ява" такого нет, т.ч. для каждого обработчика нужно создавать свой класс, что немного "тяжеловестно". В общем, банальный "pattern Command". В "новой Java" появились closure, в данном случае они вполне могут сделать код чуть проще. Но в closure мне не очень нравится реализация обработки эксепшенов. Т.ч. я против прогресса и за старый код, чуть больше строк, зато понятнее, деревеннее и надежнее ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:08 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
вадя, Это тут вообще не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:11 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
chpasha, Код: java 1. 2. 3. а если 300 надо?.... не оптимально, есть вариант проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:13 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
вадяа если 300 надо?.... если у нас 300 обработчиков, каждый из которых делает что-то свое то пишем все 300, да вадяесть вариант проще расскажи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:14 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Tsyklopвадя, Это тут вообще не при чем.это ты пока начальной стадии. Leonid KudryavtsevВ "нормальных языках программирование" ( TM ) есть ссылки на методы, т.ч. в них можно делать массив/HashMap и через него вызывать нужные методы. В "старой ява" такого нет, т.ч. для каждого обработчика нужно создавать свой класс, что немного "тяжеловестно". В общем, банальный "pattern Command". В "новой Java" появились closure, в данном случае они вполне могут сделать код чуть проще. Но в closure мне не очень нравится реализация обработки эксепшенов. Т.ч. я против прогресса и за старый код, чуть больше строк, зато понятнее, деревеннее и надежнее )))в java давно есть рефлексия, и с ней всё очень просто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:15 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
вадя, На счет рефлексии согласен. Были варианты её использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:17 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
chpashaесли у нас 300 обработчиков, каждый из которых делает что-то свое то пишем все 300, даты не понял проблемы вопрос не в количестве обработчиков, а как их вызвать у меня на каждую страницу свой java файл обработчиков. очень наглядно, удобно и мне не надо их вызывать ни через case , ни через if всё через рефлексию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:19 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
chpasha, я так понимаю, Вы привели одну из возможных реализаций pattern Command. Минусы примера, как я вижу: 1 - Factory. В принципе, в 99% задач это даром не надо, если события ходят часто, то проще уйти от ООП и инкапсуляции и, например, передавать обрабатываемые данные через параметры. Лишняя операция создания объекта лично меня обычно напрягает 2 - много букв, т.к. нужно для каждой операции создавать свой класс. Но тут вполне могут помочь лямбды и клосуры в новой Java. По смыслу будет тоже самое, но буковок в итоге может оказаться меньше и код получится более компактный. Но компактность IMHO это плюс для случаев, когда операций мало. Если операций много, то лучше через классы, т.к. компактности в любом случае не получится, но с лямбдами можно сотворить помойку, а с классами хоть и будет много букв, зато строгая и логичная система. вадя....в java давно есть рефлексия, и с ней всё очень просто IMHO & AFAIK рефлексия: a) костыль b) как всякий костыль, прощай производительность Смысла использовать рефлексию для данной задачи, лично я полностью не вижу. Ну или только с целью создания гибко настраиваемой системы, но думаю и в этом случае без нее можно обойтись IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:28 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, что скажете на счет моего варианта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:33 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevIMHO & AFAIK рефлексия: a) костыль b) как всякий костыль, прощай производительность Смысла использовать рефлексию для данной задачи, лично я полностью не вижу. Ну или только с целью создания гибко настраиваемой системы, но думаю и в этом случае без нее можно обойтись а) кто такое сказал? b) живете старыми данными - рефлексия уже очень давно не тормоз. если у тебя 300 методов и чтоб выбрать нужный - без рефлексии только case и if. и как будет выглядеть портянка из 300 case или 300 if вот где с производительность прощай... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:35 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
вадя, нет. у меня уже есть то что должно быть. Писал его я. Просто переписываю под модульность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:40 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
TsyklopLeonid Kudryavtsev, что скажете на счет моего варианта? вариант, как вариант. Вы же сами сказали: TsyklopМне не хочется набивать этот метод свичем который будет огромным для всех сообщений которые возможны. или свитч, или если не хочется свитча, то HashMap. Простейший паттерн Command. Chpasha пример реализации привел. Если не нравится фабрика, можно ее просто выкинуть. Если не нравится необходимость создания классов, можно использовать closure в новой java. Если уж так хочется, то можно и рефлексию прицепить. О чем тут дискутировать, я вообще не знаю ))). Конечно, полно обсуждений на 100500 страницах по "правильной реализации" даже таких паттернов как singleton и в принцеппе паттер command ничем не хуже )))... но это беспредметный "паттерно срачь" получится ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:42 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
вадя.... если у тебя 300 методов и чтоб выбрать нужный - без рефлексии только case и if. и как будет выглядеть портянка из 300 case или 300 if вот где с производительность прощай... HashMap чем не угодил ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:42 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, можно подробнее про вариант с HashMap-ом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:55 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevHashMap чем не угодил ?у меня в HashMap и содержится список методов, этот список заполняется при запуске серверного приложения. но как при помощи HashMap вызвать метод? и подставит ему данные? с рефлексией просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:56 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Tsyklopнет. у меня уже есть то что должно быть. Писал его я. Просто переписываю под модульность.у меня как раз и получается модульность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:58 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
вадя, можно подробнее про вариант с HashMap-ом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 12:59 |
|
||
|
Внутренний не статический класс. Верный подход? WebSocket
|
|||
|---|---|---|---|
|
#18+
Tsyklopвадя, можно подробнее про вариант с HashMap-ом?для каждой страницы есть свои методы обработки данных. их число не ограничивается. для каждой страницы эти методы находятся в отдельном файле/классе эти файлы находятся в отдельной папке при запуске приложения - эти файлы обрабатываются и в HashMap заносится имя метода и весь путь до него при получении сообщения из HashMap по имени метода/"команды" извлекается полный путь до метода и через рефлексию вызывается этот метод. загрузка в HashMap написана один раз и давно. класс с обработкой ws тоже давний. если мне надо добавить обработку я просто в нужный файл/класс (относящийся к нужной странице) добавляю метод и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2018, 13:11 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39630737&tid=2122119]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 415ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...