|
|
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
День добрый. Подскажите ламеру ответ на вот какой вопрос. Есть веб-апп. В нем есть класс с пачкой статик методов. Дергаются его методы достаточно часто и в принципе класс этот достаточно узкое место. Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс синглтоном? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 13:39:30 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Как вы определили, что это узкое место? Как вы синхронизируете вызов методов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 13:40:53 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Kartas пишет: > Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс > синглтоном? С чего бы? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 13:44:19 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
fynda Kartas пишет: > Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс > синглтоном? С чего бы? Да на эту глупость даже внимание обращать не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 13:48:33 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
KartasДень добрый. Подскажите ламеру ответ на вот какой вопрос. Есть веб-апп. В нем есть класс с пачкой статик методов. Дергаются его методы достаточно часто и в принципе класс этот достаточно узкое место. Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс синглтоном? Чисто теоретически статический вызов должен быть быстрее, так как он не виртуальный. Но на практике это никакой выигрышь по сравнению с неудобством использования статических методов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 16:16:34 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Blazkowicz KartasДень добрый. Подскажите ламеру ответ на вот какой вопрос. Есть веб-апп. В нем есть класс с пачкой статик методов. Дергаются его методы достаточно часто и в принципе класс этот достаточно узкое место. Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс синглтоном? Чисто теоретически статический вызов должен быть быстрее, так как он не виртуальный. Но на практике это никакой выигрышь по сравнению с неудобством использования статических методов. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 16:38:20 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
А если подумать чуть больше выяснится, что синглтоны и статические методы очень тяжело тестировать, так как если класс А зависит от синглотна Б, очень тяжело классу А подсунуть mock object вместо класса Б. Аналогично со статическими методами. Т.е. мой ответ вам - по возможности разрабатывать дизайн без синглтонов и стараться избегать статических методов, если они делают что-либо сложнее, чем конвертация строки в число или trim. Если же вас юнит-тестирование и поддержка кода не волнуют, то выбирайте статические методы для реализации простой логики, особенно когда для выполнения метода не важно состояние класса. Если же для выполнения метода важно иметь какой-то заранее подготовленный контекст, синглтоны уместнее. Вместо заключения хочу отметить, что масштабировать приложение, активно использующее синглотны и статику сложно, так как синглтон является таковым только в пределах одной виртуальной машины - другая виртуальная машина будет иметь свою копию со своим собственным состоянием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 16:42:41 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkriА если подумать чуть больше выяснится, что синглтоны и статические методы очень тяжело тестировать, так как если класс А зависит от синглотна Б, очень тяжело классу А подсунуть mock object вместо класса Б. Аналогично со статическими методами. Т.е. мой ответ вам - по возможности разрабатывать дизайн без синглтонов и стараться избегать статических методов, если они делают что-либо сложнее, чем конвертация строки в число или trim. Если же вас юнит-тестирование и поддержка кода не волнуют, то выбирайте статические методы для реализации простой логики, особенно когда для выполнения метода не важно состояние класса. Если же для выполнения метода важно иметь какой-то заранее подготовленный контекст, синглтоны уместнее. Вместо заключения хочу отметить, что масштабировать приложение, активно использующее синглотны и статику сложно, так как синглтон является таковым только в пределах одной виртуальной машины - другая виртуальная машина будет иметь свою копию со своим собственным состоянием. Не надо ляля Дипенденси инжекшн конечно хорошо но палку перегибать не надо - Singleton - он на то и Singleton чтобы можно было тестировать его каак есть без мок объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 16:47:24 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerНе надо ляля Дипенденси инжекшн конечно хорошо но палку перегибать не надо - Singleton - он на то и Singleton чтобы можно было тестировать его каак есть без мок объектов Перечитай ещё раз что написано, если с первого раза не вникаешь. Класс который использует синглтон трудно тестировать независимо от этого синглтона. Только в купе с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 16:52:23 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Java ProgrammerНе надо ляля Дипенденси инжекшн конечно хорошо но палку перегибать не надо - Singleton - он на то и Singleton чтобы можно было тестировать его каак есть без мок объектов Перечитай ещё раз что написано, если с первого раза не вникаешь. Класс который использует синглтон трудно тестировать независимо от этого синглтона. Только в купе с ним. Я вник с первого раза - все прекрасно тестируется писать надо правильно а не пихать синглетоны направо и налево - но "правильный" синглетон - тестированию не помешает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:02:53 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerЯ вник с первого раза - все прекрасно тестируется писать надо правильно а не пихать синглетоны направо и налево - но "правильный" синглетон - тестированию не помешает Что такое "правильный" синглтон? И что вы будете делать с этим "правильным" синглтоном, когда приложение нужно будет развертывать на кластер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:13:49 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkriИ что вы будете делать с этим "правильным" синглтоном, когда приложение нужно будет развертывать на кластер? А кто там на кластер собрался non-enterprise приложения развертывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:27:13 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Сказано же, что есть "веб-апп". В любом случае, как вы предлагаете тестировать класс Б, зависящий от синглтона А? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:29:13 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri В любом случае, как вы предлагаете тестировать класс Б, зависящий от синглтона А? Вам написать конкретный код? Или есть сложности с тем, чтобы сначала оттестировать синглтон, а потом просто его использовать так, как следует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:30:48 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
В тестах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:30:55 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Софтверный проктологИли есть сложности с тем, чтобы сначала оттестировать синглтон, а потом просто его использовать так, как следует? Конечно в этом есть сложность! Если операции синглона ресурсоемки, совершенно ни к чему их вызывать при тестировании классов, от него зависящих. И, как ни странно, очень популярно выносить в синглотны кэши объектов, которые в случае надобности умеют подгружать данные извне или еще что-нибудь такое. Что вы предлагаете выносить в синглтон, что не повлияет на тестирование классов, зависящих от него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:38:13 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Синглтон - это антипаттерн! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:39:55 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkriСказано же, что есть "веб-апп". В любом случае, как вы предлагаете тестировать класс Б, зависящий от синглтона А? Junit тестами ))) не собираюсь а тестирую - Правильный Синглетон - это синглетон который по логике должен являться таковым - один во всем приложении и все! покапайтес в jdk найдете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:40:08 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerЯ вник с первого раза Тем неменее твой пост был про тестирование синглтона, а не зависимостей. Java Programmerвсе прекрасно тестируется писать надо правильно а не пихать синглетоны направо и налево Область распространения синглтона никак не связана с тем как другой класс на него завязан. Опять же какое это отношение к "правильности" синглтона о который ты пишешь ниже? Java Programmerно "правильный" синглетон - тестированию не помешает Критери правильности в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:40:49 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkriСинглтон - это антипаттерн! Бред не несите - поначитались ерунды где индусы рассказывают про паттерны и туда же не нравится не юзайте - а бред не несите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:41:31 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Java ProgrammerЯ вник с первого раза Тем неменее твой пост был про тестирование синглтона, а не зависимостей. постом выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:43:44 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerПравильный Синглетон - это синглетон который по логике должен являться таковым - один во всем приложении и все! покапайтес в jdk найдете Одно вприложение натянутое на несколько кластре это все ещё одно приложение. Так что критерий не совсем верный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:43:56 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Конечно в этом есть сложность! Если операции синглона ресурсоемки, совершенно ни к чему их вызывать при тестировании классов, от него зависящих. И, как ни странно, очень популярно выносить в синглотны кэши объектов, которые в случае надобности умеют подгружать данные извне или еще что-нибудь такое. Что вы предлагаете выносить в синглтон, что не повлияет на тестирование классов, зависящих от него? Во время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:45:26 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java Programmer mikkriСинглтон - это антипаттерн! Бред не несите - поначитались ерунды где индусы рассказывают про паттерны и туда же не нравится не юзайте - а бред не несите Я не один час потратил над обдумыванием стратегий тестирования кривого кода, когда вовсю используют синглтоны или наследуют классы от библиотечных (которые требуют для своей инициализации уйму конфигурационных файлов и возможность общаться с чем-нибудь извне). Так что мое мнение не основано на чтении индийских трактатов, а на личном опыте. Именно поэтому, допускаю, что я могу быть не прав и именно по этому прошу вас обосновать вашу точку зрения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:49:47 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Кстати, у меня в приложении два синглтона — один представляет собой заготовку под пул подключений, другой — раздавалка сиквенсов. Всё это в рамках console-application. В рамках веба — никаких синглтонов, никаких своих thread-ов, минимум статических классов (только с дефайнам и общими несинхронизируемыми функциями). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:49:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34929181&tid=2144043]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
41ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 350ms |
| total: | 542ms |

| 0 / 0 |
