|
|
|
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 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Java ProgrammerПравильный Синглетон - это синглетон который по логике должен являться таковым - один во всем приложении и все! покапайтес в jdk найдете Одно вприложение натянутое на несколько кластре это все ещё одно приложение. Так что критерий не совсем верный. может мы еще затронем тут - репликацию баз данных ? - не надо бросаться из стороны в сторону с умом подходить к каждой задаче - не подходит синглетон не юзай - подходит отчего бы не заюзать - нечего кричать тут про антипаттерны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:50:03 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Софтверный проктологВо время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится). Т.е. для вас не важно, сколько по времени занимает прогон всех юнит-тестов? Берем практичекий пример - есть какая-нибудь фабрика объектов ObjectFactory, реализованная как синглтон. Класс из уровня бизнес-логики ClassA использует эту фабрику для того, чтобы получить данные для обработки. Теперь стоит задача протестировать бизнес-методы ClassA, учитывая, что ObjectFactory подключается к JMS в формате XML, потом парсит его и превращает в Java объект, потом лезет в БД и оттуда вытаскивает дополнительные данные, такие, как имя клиента и его кредитный лимит, далее этот Java объект возвращется ClassA для обработки. В реальной системе за счет кеширования ObjectFactory будет иметь неплохую производительность. Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга. Кстати, а как вы каждому тесту выдадите по своему, новому, инстансу синглтона? Внимательно слушаю вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:55:48 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду, что из JMS считывается сообщение в формате XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 17:57:28 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Софтверный проктологВо время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится). Т.е. для вас не важно, сколько по времени занимает прогон всех юнит-тестов? Берем практичекий пример - есть какая-нибудь фабрика объектов ObjectFactory, реализованная как синглтон. Класс из уровня бизнес-логики ClassA использует эту фабрику для того, чтобы получить данные для обработки. Теперь стоит задача протестировать бизнес-методы ClassA, учитывая, что ObjectFactory подключается к JMS в формате XML, потом парсит его и превращает в Java объект, потом лезет в БД и оттуда вытаскивает дополнительные данные, такие, как имя клиента и его кредитный лимит, далее этот Java объект возвращется ClassA для обработки. В реальной системе за счет кеширования ObjectFactory будет иметь неплохую производительность. Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга. Кстати, а как вы каждому тесту выдадите по своему, новому, инстансу синглтона? Внимательно слушаю вас. Прекрасно все тестируется поверьте! Зачем каждому тесту выдавать свой инстанс? зачем вам плодить неплодимое??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:02:04 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java Programmer mikkri Софтверный проктологВо время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится). Т.е. для вас не важно, сколько по времени занимает прогон всех юнит-тестов? Берем практичекий пример - есть какая-нибудь фабрика объектов ObjectFactory, реализованная как синглтон. Класс из уровня бизнес-логики ClassA использует эту фабрику для того, чтобы получить данные для обработки. Теперь стоит задача протестировать бизнес-методы ClassA, учитывая, что ObjectFactory подключается к JMS в формате XML, потом парсит его и превращает в Java объект, потом лезет в БД и оттуда вытаскивает дополнительные данные, такие, как имя клиента и его кредитный лимит, далее этот Java объект возвращется ClassA для обработки. В реальной системе за счет кеширования ObjectFactory будет иметь неплохую производительность. Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга. Кстати, а как вы каждому тесту выдадите по своему, новому, инстансу синглтона? Внимательно слушаю вас. Прекрасно все тестируется поверьте! Зачем каждому тесту выдавать свой инстанс? зачем вам плодить неплодимое??? Надо его изменять и вабще кто сказал что вам тут нужен синглетон ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:03:15 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerПрекрасно все тестируется поверьте! Зачем каждому тесту выдавать свой инстанс? зачем вам плодить неплодимое??? Так расскажите - как! Каждому тесту нужен свой инстанс, чтобы избежать зависимостей, т.е. когда Тест2 работает после Тест1, но не работает если его запустить автономно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:04:22 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга. Зачем? Мы же оттестировали класс синглтона и считаем, что он замечательно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:05:15 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerНадо его изменять и вабще кто сказал что вам тут нужен синглетон ?? Могу я это считать вашим согласием с тем, что синглтоны мешают юнит-тестированию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:05:19 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Софтверный проктологЗачем? Мы же оттестировали класс синглтона и считаем, что он замечательно работает. От того, что ObjectFactory работает правильно и Тест2 проходит после запуска Тест1 не значит, что Тест2 пройдет, если его запустить автономно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:06:59 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Java ProgrammerНадо его изменять и вабще кто сказал что вам тут нужен синглетон ?? Могу я это считать вашим согласием с тем, что синглтоны мешают юнит-тестированию? Неет :) вы можете считать этот пост моис убеждением что каждый тест надо подготавливать - собирать для него заглушки - что равносильно сбросу состояния синглетона и инициализации его заново ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:12:07 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Софтверный проктологЗачем? Мы же оттестировали класс синглтона и считаем, что он замечательно работает. От того, что ObjectFactory работает правильно и Тест2 проходит после запуска Тест1 не значит, что Тест2 пройдет, если его запустить автономно. А знаете что есть такая штука - что некоторые вещи просто принципиально нельзя тестировать безотносительно контекста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:13:42 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог mikkri Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга. Зачем? Мы же оттестировали класс синглтона и считаем, что он замечательно работает. Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:17:15 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerА знаете что есть такая штука - что некоторые вещи просто принципиально нельзя тестировать безотносительно контекста Уточните, пожалуйста, что вы имеете ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:18:27 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью? Ну если мы используем тот же инстанс, то производительность в итоге будет ровно такой же, как и в реальной работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:22:55 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог mikkri Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью? Ну если мы используем тот же инстанс, то производительность в итоге будет ровно такой же, как и в реальной работе. Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:32:50 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени. Да что же у вас там за логика такая, что тратит такое гигантское количество времени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:35:09 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Софтверный проктолог mikkri Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью? Ну если мы используем тот же инстанс, то производительность в итоге будет ровно такой же, как и в реальной работе. Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени. Не понял а что создание объекта и его инициализация - займет больше времени чем переинициализация синглетона? В общем так - нужен синглетон - юзай не нужен - не юзай - я не прав ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:35:17 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени. И в таком случае плевать — синглтон у вас или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:36:49 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог mikkri Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени. Да что же у вас там за логика такая, что тратит такое гигантское количество времени? Если каждый раз при запуске теста нужно установить подключение к JMS Queue, опубликовать туда тестовое сообщение, потом подключиться в БД и выполнить несколько запросов, тесты будут долго работать. Если же вместо реальной реализации ObjectFactory подсунуть mock object, то процесс прогона теста будет занимать очень мало времени, вряд ли больше 1-2 секунд даже в самом сложном сценарии. Вообщем, предлагаю сделать вывод - синглтоны нужны от лености ума и рук, а не от желания сделать хорошее приложение. Вообще, наличие неявных зависимостей между объектами плохо, так как не дает не только протестировать их в изолированных условиях, но увеличивает риски что-нибудь сломать в приложении неожиданно . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:40:10 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Софтверный проктолог mikkri Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени. Да что же у вас там за логика такая, что тратит такое гигантское количество времени? Если каждый раз при запуске теста нужно установить подключение к JMS Queue, опубликовать туда тестовое сообщение, потом подключиться в БД и выполнить несколько запросов, тесты будут долго работать. Если же вместо реальной реализации ObjectFactory подсунуть mock object, то процесс прогона теста будет занимать очень мало времени, вряд ли больше 1-2 секунд даже в самом сложном сценарии. Вообщем, предлагаю сделать вывод - синглтоны нужны от лености ума и рук, а не от желания сделать хорошее приложение. Вообще, наличие неявных зависимостей между объектами плохо, так как не дает не только протестировать их в изолированных условиях, но увеличивает риски что-нибудь сломать в приложении неожиданно . А где вы видели приложение без неявных связей! ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:45:45 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java ProgrammerА где вы видели приложение без неявных связей! ?? В книжке, называется Hello World! А если серьезно, то, что в любом большом приложении есть неявные связи не значит, что их размножение нужно поощрять. Наоборот по мере возможностей нужно их рефакторить и заменять на явные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:49:20 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri Java ProgrammerА где вы видели приложение без неявных связей! ?? В книжке, называется Hello World! А если серьезно, то, что в любом большом приложении есть неявные связи не значит, что их размножение нужно поощрять. Наоборот по мере возможностей нужно их рефакторить и заменять на явные. )) кто спорит - я же сказал что Синглетон не надо пихать во все дыры - но то что это антипаттерн я с Вами не согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 18:57:12 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Ну, пример "правильного" (на мой взгляд) синглтона могу привести. Есть Swing-клиент (не апплет, и апплетом никогда не будет!). Есть так называемые справочники - валюты, языки, страны/города и т.д. и т.п. Данные в справочниках условно неизменяемы (т.е. меняются крайне редко). Для каждого справочника создается синглтон, который лениво подгружает данные с сервера приложений и кэширует (обращения к справочникам идут очень часто, так что каждый раз их грузить с сервера приложений как то не кошерно). При этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник. Здоровая критика принимается! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:01:13 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
ДуремарНу, пример "правильного" (на мой взгляд) синглтона могу привести. Есть Swing-клиент (не апплет, и апплетом никогда не будет!). Есть так называемые справочники - валюты, языки, страны/города и т.д. и т.п. Данные в справочниках условно неизменяемы (т.е. меняются крайне редко). Для каждого справочника создается синглтон, который лениво подгружает данные с сервера приложений и кэширует (обращения к справочникам идут очень часто, так что каждый раз их грузить с сервера приложений как то не кошерно). При этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник. Здоровая критика принимается! Нахрен, такой singleton не нужен. Такое вообще нормально ложится на Hibrnate nonstrict-read-write. Один раз вычиталось и лежит себе тихоничко в кэше. И повторно никогда не вычитывается, пока в админке набор не изменят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:27:08 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Java Programmerможет мы еще затронем тут - репликацию баз данных ? - не надо бросаться из стороны в сторону с умом подходить к каждой задаче - не подходит синглетон не юзай - подходит отчего бы не заюзать - нечего кричать тут про антипаттерны Примеры, плз, когда подходит. mikkri, кстати ещё один мощный аргумент привел. Конкурентное тестирование классов, который один синглтон юзают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:28:44 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
ДуремарПри этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник. Здоровая критика принимается! Вот тут и проблема с инициализацией синглтона. Что делать, если кто-то к нему обратиться до инициализации? Что делать, если кто-то попробует сделать повторную инициализацию? Мне лично сейчас кажется, что подход, пропогандируемый Spring Framework - когда все зависимости явно задаются через поля классов, гибче и удешевляет поддержку приложения. В такой ситуации у вас просто не будет доступа к вашему кешу объектов до его инициализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:31:17 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkri ДуремарПри этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник. Здоровая критика принимается! Вот тут и проблема с инициализацией синглтона. Что делать, если кто-то к нему обратиться до инициализации? Что делать, если кто-то попробует сделать повторную инициализацию? Мне лично сейчас кажется, что подход, пропогандируемый Spring Framework - когда все зависимости явно задаются через поля классов, гибче и удешевляет поддержку приложения. В такой ситуации у вас просто не будет доступа к вашему кешу объектов до его инициализации. Даа - мне тоже нравиться спринг - я тоже его активно юзаю - но есть просто ситуации когда нельзя использовать спринг ну бывает такое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:38:03 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНахрен, такой singleton не нужен. Такое вообще нормально ложится на Hibrnate nonstrict-read-write. Один раз вычиталось и лежит себе тихоничко в кэше. И повторно никогда не вычитывается, пока в админке набор не изменят. Напоминаю - приложение клиентское. Хибернэйтом там даже не пахнет. Хибернэйт на сервере. Кэшировать надо на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:40:44 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
mikkriВот тут и проблема с инициализацией синглтона. Что делать, если кто-то к нему обратиться до инициализации? Что делать, если кто-то попробует сделать повторную инициализацию? Мне лично сейчас кажется, что подход, пропогандируемый Spring Framework - когда все зависимости явно задаются через поля классов, гибче и удешевляет поддержку приложения. В такой ситуации у вас просто не будет доступа к вашему кешу объектов до его инициализации. Вот с этим согласен - лоадеры лучше было бы через Spring инициализировать. Просто справочники были написаны до того, как я решил Spring к клиенту присобачить (АОП понадобился). Как руки дойдут, переделаю на спринговую инициализацию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 19:44:40 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
ДуремарНапоминаю - приложение клиентское. Хибернэйтом там даже не пахнет. Хибернэйт на сервере. Кэшировать надо на клиенте. Да, какая разница-то. Если можно нормальный кэш прикрутить, то на кой эти синглтоны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2007, 02:33:01 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Blazkowicz ДуремарНапоминаю - приложение клиентское. Хибернэйтом там даже не пахнет. Хибернэйт на сервере. Кэшировать надо на клиенте. Да, какая разница-то. Если можно нормальный кэш прикрутить, то на кой эти синглтоны? Т.е. вы предлагаете мне на клиента Hibernate тащить только ради кэширования? Или вообще через Hibernate работать с сервером приложений (только как - непонятно)? Мне кажется, что такое решение будет мягко говоря неразумным. Держать хибернэйтовский кэш на сервере? Тоже не катит - дело в том, что мой клиент работает как по локальной сети через RMI, так и через интеренет (веб-сервисы). В случае локальной сети серверный кэш еще хоть как то себя оправдывает, но вот при работе через интернет - просто не катит. Зачастую время на передачу данных значительно превышает время на выборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2007, 17:32:08 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
ДуремарТ.е. вы предлагаете мне на клиента Hibernate тащить только ради кэширования? У вас богатая фантазия. ДуремарИли вообще через Hibernate работать с сервером приложений (только как - непонятно)? Мне кажется, что такое решение будет мягко говоря неразумным. Держать хибернэйтовский кэш на сервере? Тоже не катит - дело в том, что мой клиент работает как по локальной сети через RMI, так и через интеренет (веб-сервисы). В случае локальной сети серверный кэш еще хоть как то себя оправдывает, но вот при работе через интернет - просто не катит. Зачастую время на передачу данных значительно превышает время на выборку. Просто я апроксимировал, т.к. в большинстве случаев подбный сценарий для серверной стороны и нужен. В случае же клиента, надо на него перетащить соотвествующий кэш с уведомлениями от сервера. Зачем тут синглтоны, когда задача просто ложится на кэш и все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 12:32:40 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЗачем тут синглтоны, когда задача просто ложится на кэш и все? Не подскажете, существуют ли "лёгкие" open source реализации кэша, которые можно прикрутить на desctop клиент? Работать должны с оперативной памятью. Можно и платные - с этим проблем нет. Ведь синглтоны я использую не от хорошей жизни - просто нужен кэш на клиенте, а синглтон наиболее простое решение, когда делаешь его руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 12:54:51 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
ДуремарНе подскажете, существуют ли "лёгкие" open source реализации кэша, которые можно прикрутить на desctop клиент? Работать должны с оперативной памятью. Можно и платные - с этим проблем нет. Ведь синглтоны я использую не от хорошей жизни - просто нужен кэш на клиенте, а синглтон наиболее простое решение, когда делаешь его руками. http://java-source.net/open-source/cache-solutions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 13:21:10 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Blazkowicz... Ok, спасибо. Поизучаю на досуге :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 13:23:35 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Дуремар BlazkowiczЗачем тут синглтоны, когда задача просто ложится на кэш и все? Не подскажете, существуют ли "лёгкие" open source реализации кэша, которые можно прикрутить на desctop клиент? Работать должны с оперативной памятью. Можно и платные - с этим проблем нет. Ведь синглтоны я использую не от хорошей жизни - просто нужен кэш на клиенте, а синглтон наиболее простое решение, когда делаешь его руками. я использовал spring + oscache ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 13:33:44 |
|
||
|
static methods VS Singleton
|
|||
|---|---|---|---|
|
#18+
Да, надо разобраться с этим вопросом. Справочники задача не того калибра, чтобы перепиывать существующий рабочий код, но вот предстоит в ближайшем будущем некоторая задача, где качественный кэш очень даже пригодится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2007, 13:39:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2144043]: |
0ms |
get settings: |
14ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
43ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
111ms |
get tp. blocked users: |
2ms |
| others: | 387ms |
| total: | 609ms |

| 0 / 0 |
