powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / static methods VS Singleton
62 сообщений из 62, показаны все 3 страниц
static methods VS Singleton
    #34928092
Kartas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый. Подскажите ламеру ответ на вот какой вопрос.

Есть веб-апп. В нем есть класс с пачкой статик методов. Дергаются его методы достаточно часто и в принципе класс этот достаточно узкое место.
Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс синглтоном?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928098
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вы определили, что это узкое место? Как вы синхронизируете вызов методов?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928119
fynda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kartas пишет:

> Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс
> синглтоном?

С чего бы?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928143
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fynda
Kartas пишет:

> Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс
> синглтоном?

С чего бы?

Да на эту глупость даже внимание обращать не стоит.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928855
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KartasДень добрый. Подскажите ламеру ответ на вот какой вопрос.

Есть веб-апп. В нем есть класс с пачкой статик методов. Дергаются его методы достаточно часто и в принципе класс этот достаточно узкое место.
Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс синглтоном?
Чисто теоретически статический вызов должен быть быстрее, так как он не виртуальный. Но на практике это никакой выигрышь по сравнению с неудобством использования статических методов.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928945
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz KartasДень добрый. Подскажите ламеру ответ на вот какой вопрос.

Есть веб-апп. В нем есть класс с пачкой статик методов. Дергаются его методы достаточно часто и в принципе класс этот достаточно узкое место.
Так вот вопрос - не получу ли я выгрыша в скорости сделав этот класс синглтоном?
Чисто теоретически статический вызов должен быть быстрее, так как он не виртуальный. Но на практике это никакой выигрышь по сравнению с неудобством использования статических методов.

+1
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928964
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если подумать чуть больше выяснится, что синглтоны и статические методы очень тяжело тестировать, так как если класс А зависит от синглотна Б, очень тяжело классу А подсунуть mock object вместо класса Б. Аналогично со статическими методами.

Т.е. мой ответ вам - по возможности разрабатывать дизайн без синглтонов и стараться избегать статических методов, если они делают что-либо сложнее, чем конвертация строки в число или trim.

Если же вас юнит-тестирование и поддержка кода не волнуют, то выбирайте статические методы для реализации простой логики, особенно когда для выполнения метода не важно состояние класса. Если же для выполнения метода важно иметь какой-то заранее подготовленный контекст, синглтоны уместнее.

Вместо заключения хочу отметить, что масштабировать приложение, активно использующее синглотны и статику сложно, так как синглтон является таковым только в пределах одной виртуальной машины - другая виртуальная машина будет иметь свою копию со своим собственным состоянием.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928982
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkriА если подумать чуть больше выяснится, что синглтоны и статические методы очень тяжело тестировать, так как если класс А зависит от синглотна Б, очень тяжело классу А подсунуть mock object вместо класса Б. Аналогично со статическими методами.

Т.е. мой ответ вам - по возможности разрабатывать дизайн без синглтонов и стараться избегать статических методов, если они делают что-либо сложнее, чем конвертация строки в число или trim.

Если же вас юнит-тестирование и поддержка кода не волнуют, то выбирайте статические методы для реализации простой логики, особенно когда для выполнения метода не важно состояние класса. Если же для выполнения метода важно иметь какой-то заранее подготовленный контекст, синглтоны уместнее.

Вместо заключения хочу отметить, что масштабировать приложение, активно использующее синглотны и статику сложно, так как синглтон является таковым только в пределах одной виртуальной машины - другая виртуальная машина будет иметь свою копию со своим собственным состоянием.

Не надо ляля Дипенденси инжекшн конечно хорошо но палку перегибать не надо - Singleton - он на то и Singleton чтобы можно было тестировать его каак есть без мок объектов
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34928997
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerНе надо ляля Дипенденси инжекшн конечно хорошо но палку перегибать не
надо - Singleton - он на то и Singleton чтобы можно было тестировать его каак есть без мок объектов
Перечитай ещё раз что написано, если с первого раза не вникаешь. Класс который использует синглтон трудно тестировать независимо от этого синглтона. Только в купе с ним.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929038
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Java ProgrammerНе надо ляля Дипенденси инжекшн конечно хорошо но палку перегибать не
надо - Singleton - он на то и Singleton чтобы можно было тестировать его каак есть без мок объектов
Перечитай ещё раз что написано, если с первого раза не вникаешь. Класс который использует синглтон трудно тестировать независимо от этого синглтона. Только в купе с ним.

Я вник с первого раза - все прекрасно тестируется писать надо правильно а не пихать синглетоны направо и налево - но "правильный" синглетон - тестированию не помешает
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929073
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerЯ вник с первого раза - все прекрасно тестируется писать надо правильно а не пихать синглетоны направо и налево - но "правильный" синглетон - тестированию не помешает

Что такое "правильный" синглтон?
И что вы будете делать с этим "правильным" синглтоном, когда приложение нужно будет развертывать на кластер?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929118
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkriИ что вы будете делать с этим "правильным" синглтоном, когда приложение нужно будет развертывать на кластер?
А кто там на кластер собрался non-enterprise приложения развертывать?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929123
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сказано же, что есть "веб-апп".

В любом случае, как вы предлагаете тестировать класс Б, зависящий от синглтона А?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929131
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri
В любом случае, как вы предлагаете тестировать класс Б, зависящий от синглтона А?
Вам написать конкретный код?
Или есть сложности с тем, чтобы сначала оттестировать синглтон, а потом просто его использовать так, как следует?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929132
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тестах.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929151
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктологИли есть сложности с тем, чтобы сначала оттестировать синглтон, а потом просто его использовать так, как следует?

Конечно в этом есть сложность! Если операции синглона ресурсоемки, совершенно ни к чему их вызывать при тестировании классов, от него зависящих. И, как ни странно, очень популярно выносить в синглотны кэши объектов, которые в случае надобности умеют подгружать данные извне или еще что-нибудь такое.

Что вы предлагаете выносить в синглтон, что не повлияет на тестирование классов, зависящих от него?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929160
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синглтон - это антипаттерн!
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929161
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkriСказано же, что есть "веб-апп".

В любом случае, как вы предлагаете тестировать класс Б, зависящий от синглтона А?

Junit тестами ))) не собираюсь а тестирую -

Правильный Синглетон - это синглетон который по логике должен являться таковым - один во всем приложении и все! покапайтес в jdk найдете
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929164
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerЯ вник с первого раза
Тем неменее твой пост был про тестирование синглтона, а не зависимостей.

Java Programmerвсе прекрасно тестируется писать надо правильно а не пихать синглетоны направо и налево
Область распространения синглтона никак не связана с тем как другой класс на него завязан.
Опять же какое это отношение к "правильности" синглтона о который ты пишешь ниже?

Java Programmerно "правильный" синглетон - тестированию не помешает
Критери правильности в студию!
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929166
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkriСинглтон - это антипаттерн!

Бред не несите - поначитались ерунды где индусы рассказывают про паттерны и туда же
не нравится не юзайте - а бред не несите
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929174
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Java ProgrammerЯ вник с первого раза
Тем неменее твой пост был про тестирование синглтона, а не зависимостей.

постом выше
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929175
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerПравильный Синглетон - это синглетон который по логике должен являться таковым - один во всем приложении и все! покапайтес в jdk найдете
Одно вприложение натянутое на несколько кластре это все ещё одно приложение. Так что критерий не совсем верный.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929181
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri
Конечно в этом есть сложность! Если операции синглона ресурсоемки, совершенно ни к чему их вызывать при тестировании классов, от него зависящих. И, как ни странно, очень популярно выносить в синглотны кэши объектов, которые в случае надобности умеют подгружать данные извне или еще что-нибудь такое.

Что вы предлагаете выносить в синглтон, что не повлияет на тестирование классов, зависящих от него?
Во время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится).
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929198
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java Programmer mikkriСинглтон - это антипаттерн!

Бред не несите - поначитались ерунды где индусы рассказывают про паттерны и туда же
не нравится не юзайте - а бред не несите
Я не один час потратил над обдумыванием стратегий тестирования кривого кода, когда вовсю используют синглтоны или наследуют классы от библиотечных (которые требуют для своей инициализации уйму конфигурационных файлов и возможность общаться с чем-нибудь извне).

Так что мое мнение не основано на чтении индийских трактатов, а на личном опыте. Именно поэтому, допускаю, что я могу быть не прав и именно по этому прошу вас обосновать вашу точку зрения.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929199
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, у меня в приложении два синглтона — один представляет собой заготовку под пул подключений, другой — раздавалка сиквенсов. Всё это в рамках console-application.
В рамках веба — никаких синглтонов, никаких своих thread-ов, минимум статических классов (только с дефайнам и общими несинхронизируемыми функциями).
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929201
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Java ProgrammerПравильный Синглетон - это синглетон который по логике должен являться таковым - один во всем приложении и все! покапайтес в jdk найдете
Одно вприложение натянутое на несколько кластре это все ещё одно приложение. Так что критерий не совсем верный.

может мы еще затронем тут - репликацию баз данных ? - не надо бросаться из стороны в сторону с умом подходить к каждой задаче - не подходит синглетон не юзай - подходит отчего бы не заюзать - нечего кричать тут про антипаттерны
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929216
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктологВо время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится).
Т.е. для вас не важно, сколько по времени занимает прогон всех юнит-тестов?

Берем практичекий пример - есть какая-нибудь фабрика объектов ObjectFactory, реализованная как синглтон. Класс из уровня бизнес-логики ClassA использует эту фабрику для того, чтобы получить данные для обработки.

Теперь стоит задача протестировать бизнес-методы ClassA, учитывая, что ObjectFactory подключается к JMS в формате XML, потом парсит его и превращает в Java объект, потом лезет в БД и оттуда вытаскивает дополнительные данные, такие, как имя клиента и его кредитный лимит, далее этот Java объект возвращется ClassA для обработки.

В реальной системе за счет кеширования ObjectFactory будет иметь неплохую производительность. Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга.

Кстати, а как вы каждому тесту выдадите по своему, новому, инстансу синглтона?

Внимательно слушаю вас.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929218
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду, что из JMS считывается сообщение в формате XML
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929228
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri Софтверный проктологВо время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится).
Т.е. для вас не важно, сколько по времени занимает прогон всех юнит-тестов?

Берем практичекий пример - есть какая-нибудь фабрика объектов ObjectFactory, реализованная как синглтон. Класс из уровня бизнес-логики ClassA использует эту фабрику для того, чтобы получить данные для обработки.

Теперь стоит задача протестировать бизнес-методы ClassA, учитывая, что ObjectFactory подключается к JMS в формате XML, потом парсит его и превращает в Java объект, потом лезет в БД и оттуда вытаскивает дополнительные данные, такие, как имя клиента и его кредитный лимит, далее этот Java объект возвращется ClassA для обработки.

В реальной системе за счет кеширования ObjectFactory будет иметь неплохую производительность. Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга.

Кстати, а как вы каждому тесту выдадите по своему, новому, инстансу синглтона?

Внимательно слушаю вас.

Прекрасно все тестируется поверьте!
Зачем каждому тесту выдавать свой инстанс? зачем вам плодить неплодимое???
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929233
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java Programmer mikkri Софтверный проктологВо время тестирования чихать на то, насколько ресурсоемки операции в синглтоне (к тому же я не очень себе представляю, что это за зверь такой получится).
Т.е. для вас не важно, сколько по времени занимает прогон всех юнит-тестов?

Берем практичекий пример - есть какая-нибудь фабрика объектов ObjectFactory, реализованная как синглтон. Класс из уровня бизнес-логики ClassA использует эту фабрику для того, чтобы получить данные для обработки.

Теперь стоит задача протестировать бизнес-методы ClassA, учитывая, что ObjectFactory подключается к JMS в формате XML, потом парсит его и превращает в Java объект, потом лезет в БД и оттуда вытаскивает дополнительные данные, такие, как имя клиента и его кредитный лимит, далее этот Java объект возвращется ClassA для обработки.

В реальной системе за счет кеширования ObjectFactory будет иметь неплохую производительность. Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга.

Кстати, а как вы каждому тесту выдадите по своему, новому, инстансу синглтона?

Внимательно слушаю вас.

Прекрасно все тестируется поверьте!
Зачем каждому тесту выдавать свой инстанс? зачем вам плодить неплодимое???

Надо его изменять и вабще кто сказал что вам тут нужен синглетон ??
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929235
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerПрекрасно все тестируется поверьте!
Зачем каждому тесту выдавать свой инстанс? зачем вам плодить неплодимое???

Так расскажите - как!

Каждому тесту нужен свой инстанс, чтобы избежать зависимостей, т.е. когда Тест2 работает после Тест1, но не работает если его запустить автономно.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929238
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri
Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга.

Зачем?
Мы же оттестировали класс синглтона и считаем, что он замечательно работает.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929239
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerНадо его изменять и вабще кто сказал что вам тут нужен синглетон ??
Могу я это считать вашим согласием с тем, что синглтоны мешают юнит-тестированию?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929244
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктологЗачем?
Мы же оттестировали класс синглтона и считаем, что он замечательно работает.
От того, что ObjectFactory работает правильно и Тест2 проходит после запуска Тест1 не значит, что Тест2 пройдет, если его запустить автономно.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929257
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri Java ProgrammerНадо его изменять и вабще кто сказал что вам тут нужен синглетон ??
Могу я это считать вашим согласием с тем, что синглтоны мешают юнит-тестированию?


Неет :) вы можете считать этот пост моис убеждением что каждый тест надо подготавливать - собирать для него заглушки - что равносильно сбросу состояния синглетона и инициализации его заново )
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929260
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri Софтверный проктологЗачем?
Мы же оттестировали класс синглтона и считаем, что он замечательно работает.
От того, что ObjectFactory работает правильно и Тест2 проходит после запуска Тест1 не значит, что Тест2 пройдет, если его запустить автономно.

А знаете что есть такая штука - что некоторые вещи просто принципиально нельзя тестировать безотносительно контекста
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929275
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктолог mikkri
Но вот при юнит-тестировании нам нужно для каждого теста НОВЫЙ инстанс ObjectFactory, чтобы тесты не оказывали влияния друг на друга.

Зачем?
Мы же оттестировали класс синглтона и считаем, что он замечательно работает.
Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929277
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerА знаете что есть такая штука - что некоторые вещи просто принципиально нельзя тестировать безотносительно контекста
Уточните, пожалуйста, что вы имеете ввиду.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929295
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri
Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью?
Ну если мы используем тот же инстанс, то производительность в итоге будет ровно такой же, как и в реальной работе.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929322
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктолог mikkri
Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью?
Ну если мы используем тот же инстанс, то производительность в итоге будет ровно такой же, как и в реальной работе.
Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929325
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri
Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени.
Да что же у вас там за логика такая, что тратит такое гигантское количество времени?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929326
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri Софтверный проктолог mikkri
Даже если допустить, что мы можем использовать тот же инстанс ObjectFactory, что делать с производительностью?
Ну если мы используем тот же инстанс, то производительность в итоге будет ровно такой же, как и в реальной работе.
Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени.

Не понял а что создание объекта и его инициализация - займет больше времени чем переинициализация синглетона?
В общем так - нужен синглетон - юзай не нужен - не юзай - я не прав ??
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929327
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri
Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени.
И в таком случае плевать — синглтон у вас или нет.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929333
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктолог mikkri
Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени.
Да что же у вас там за логика такая, что тратит такое гигантское количество времени?
Если каждый раз при запуске теста нужно установить подключение к JMS Queue, опубликовать туда тестовое сообщение, потом подключиться в БД и выполнить несколько запросов, тесты будут долго работать. Если же вместо реальной реализации ObjectFactory подсунуть mock object, то процесс прогона теста будет занимать очень мало времени, вряд ли больше 1-2 секунд даже в самом сложном сценарии.

Вообщем, предлагаю сделать вывод - синглтоны нужны от лености ума и рук, а не от желания сделать хорошее приложение. Вообще, наличие неявных зависимостей между объектами плохо, так как не дает не только протестировать их в изолированных условиях, но увеличивает риски что-нибудь сломать в приложении неожиданно .
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929347
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri Софтверный проктолог mikkri
Не верно в общем случае, потом, для юнит-тестов предпочтительно иметь очень высокую производительность, чтобы их можно было гонять десятки раз за день без заметных трат времени.
Да что же у вас там за логика такая, что тратит такое гигантское количество времени?
Если каждый раз при запуске теста нужно установить подключение к JMS Queue, опубликовать туда тестовое сообщение, потом подключиться в БД и выполнить несколько запросов, тесты будут долго работать. Если же вместо реальной реализации ObjectFactory подсунуть mock object, то процесс прогона теста будет занимать очень мало времени, вряд ли больше 1-2 секунд даже в самом сложном сценарии.

Вообщем, предлагаю сделать вывод - синглтоны нужны от лености ума и рук, а не от желания сделать хорошее приложение. Вообще, наличие неявных зависимостей между объектами плохо, так как не дает не только протестировать их в изолированных условиях, но увеличивает риски что-нибудь сломать в приложении неожиданно .

А где вы видели приложение без неявных связей! ??
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929353
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java ProgrammerА где вы видели приложение без неявных связей! ??
В книжке, называется Hello World!

А если серьезно, то, что в любом большом приложении есть неявные связи не значит, что их размножение нужно поощрять. Наоборот по мере возможностей нужно их рефакторить и заменять на явные.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929370
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri Java ProgrammerА где вы видели приложение без неявных связей! ??
В книжке, называется Hello World!

А если серьезно, то, что в любом большом приложении есть неявные связи не значит, что их размножение нужно поощрять. Наоборот по мере возможностей нужно их рефакторить и заменять на явные.

)) кто спорит - я же сказал что Синглетон не надо пихать во все дыры - но то что это антипаттерн я с Вами не согласен
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929387
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, пример "правильного" (на мой взгляд) синглтона могу привести. Есть Swing-клиент (не апплет, и апплетом никогда не будет!). Есть так называемые справочники - валюты, языки, страны/города и т.д. и т.п. Данные в справочниках условно неизменяемы (т.е. меняются крайне редко). Для каждого справочника создается синглтон, который лениво подгружает данные с сервера приложений и кэширует (обращения к справочникам идут очень часто, так что каждый раз их грузить с сервера приложений как то не кошерно). При этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник.
Здоровая критика принимается!
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929425
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДуремарНу, пример "правильного" (на мой взгляд) синглтона могу привести. Есть Swing-клиент (не апплет, и апплетом никогда не будет!). Есть так называемые справочники - валюты, языки, страны/города и т.д. и т.п. Данные в справочниках условно неизменяемы (т.е. меняются крайне редко). Для каждого справочника создается синглтон, который лениво подгружает данные с сервера приложений и кэширует (обращения к справочникам идут очень часто, так что каждый раз их грузить с сервера приложений как то не кошерно). При этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник.
Здоровая критика принимается!
Нахрен, такой singleton не нужен. Такое вообще нормально ложится на Hibrnate nonstrict-read-write. Один раз вычиталось и лежит себе тихоничко в кэше. И повторно никогда не вычитывается, пока в админке набор не изменят.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929431
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Java Programmerможет мы еще затронем тут - репликацию баз данных ? - не надо бросаться из стороны в сторону с умом подходить к каждой задаче - не подходит синглетон не юзай - подходит отчего бы не заюзать - нечего кричать тут про антипаттерны
Примеры, плз, когда подходит. mikkri, кстати ещё один мощный аргумент привел. Конкурентное тестирование классов, который один синглтон юзают.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929441
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДуремарПри этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник.
Здоровая критика принимается!
Вот тут и проблема с инициализацией синглтона. Что делать, если кто-то к нему обратиться до инициализации? Что делать, если кто-то попробует сделать повторную инициализацию?

Мне лично сейчас кажется, что подход, пропогандируемый Spring Framework - когда все зависимости явно задаются через поля классов, гибче и удешевляет поддержку приложения. В такой ситуации у вас просто не будет доступа к вашему кешу объектов до его инициализации.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929451
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri ДуремарПри этом логика подгрузки не зашита в синглтоне - каждый в каждый синглтон устанавливается (при инициализации приложения) некий Loader, который и грузит данные. При реальной работе устанавливеется Loader который стучится к серверу приложений, при тестировании "фальшивый" Loader - который возвращает предопределенный справочник.
Здоровая критика принимается!
Вот тут и проблема с инициализацией синглтона. Что делать, если кто-то к нему обратиться до инициализации? Что делать, если кто-то попробует сделать повторную инициализацию?

Мне лично сейчас кажется, что подход, пропогандируемый Spring Framework - когда все зависимости явно задаются через поля классов, гибче и удешевляет поддержку приложения. В такой ситуации у вас просто не будет доступа к вашему кешу объектов до его инициализации.

Даа - мне тоже нравиться спринг - я тоже его активно юзаю - но есть просто ситуации когда нельзя использовать спринг ну бывает такое
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929457
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНахрен, такой singleton не нужен. Такое вообще нормально ложится на Hibrnate nonstrict-read-write. Один раз вычиталось и лежит себе тихоничко в кэше. И повторно никогда не вычитывается, пока в админке набор не изменят.
Напоминаю - приложение клиентское. Хибернэйтом там даже не пахнет. Хибернэйт на сервере. Кэшировать надо на клиенте.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929467
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkriВот тут и проблема с инициализацией синглтона. Что делать, если кто-то к нему обратиться до инициализации? Что делать, если кто-то попробует сделать повторную инициализацию?

Мне лично сейчас кажется, что подход, пропогандируемый Spring Framework - когда все зависимости явно задаются через поля классов, гибче и удешевляет поддержку приложения. В такой ситуации у вас просто не будет доступа к вашему кешу объектов до его инициализации.
Вот с этим согласен - лоадеры лучше было бы через Spring инициализировать. Просто справочники были написаны до того, как я решил Spring к клиенту присобачить (АОП понадобился). Как руки дойдут, переделаю на спринговую инициализацию :)
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34929658
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДуремарНапоминаю - приложение клиентское. Хибернэйтом там даже не пахнет. Хибернэйт на сервере. Кэшировать надо на клиенте.
Да, какая разница-то. Если можно нормальный кэш прикрутить, то на кой эти синглтоны?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34930101
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz ДуремарНапоминаю - приложение клиентское. Хибернэйтом там даже не пахнет. Хибернэйт на сервере. Кэшировать надо на клиенте.
Да, какая разница-то. Если можно нормальный кэш прикрутить, то на кой эти синглтоны?
Т.е. вы предлагаете мне на клиента Hibernate тащить только ради кэширования? Или вообще через Hibernate работать с сервером приложений (только как - непонятно)? Мне кажется, что такое решение будет мягко говоря неразумным.
Держать хибернэйтовский кэш на сервере? Тоже не катит - дело в том, что мой клиент работает как по локальной сети через RMI, так и через интеренет (веб-сервисы). В случае локальной сети серверный кэш еще хоть как то себя оправдывает, но вот при работе через интернет - просто не катит. Зачастую время на передачу данных значительно превышает время на выборку.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34931816
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДуремарТ.е. вы предлагаете мне на клиента Hibernate тащить только ради кэширования?
У вас богатая фантазия.

ДуремарИли вообще через Hibernate работать с сервером приложений (только как - непонятно)? Мне кажется, что такое решение будет мягко говоря неразумным.
Держать хибернэйтовский кэш на сервере? Тоже не катит - дело в том, что мой клиент работает как по локальной сети через RMI, так и через интеренет (веб-сервисы). В случае локальной сети серверный кэш еще хоть как то себя оправдывает, но вот при работе через интернет - просто не катит. Зачастую время на передачу данных значительно превышает время на выборку.
Просто я апроксимировал, т.к. в большинстве случаев подбный сценарий для серверной стороны и нужен. В случае же клиента, надо на него перетащить соотвествующий кэш с уведомлениями от сервера. Зачем тут синглтоны, когда задача просто ложится на кэш и все?
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34931906
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЗачем тут синглтоны, когда задача просто ложится на кэш и все?
Не подскажете, существуют ли "лёгкие" open source реализации кэша, которые можно прикрутить на desctop клиент? Работать должны с оперативной памятью. Можно и платные - с этим проблем нет. Ведь синглтоны я использую не от хорошей жизни - просто нужен кэш на клиенте, а синглтон наиболее простое решение, когда делаешь его руками.
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34932028
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДуремарНе подскажете, существуют ли "лёгкие" open source реализации кэша, которые можно прикрутить на desctop клиент? Работать должны с оперативной памятью. Можно и платные - с этим проблем нет. Ведь синглтоны я использую не от хорошей жизни - просто нужен кэш на клиенте, а синглтон наиболее простое решение, когда делаешь его руками.
http://java-source.net/open-source/cache-solutions
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34932034
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz...
Ok, спасибо. Поизучаю на досуге :)
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34932090
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дуремар BlazkowiczЗачем тут синглтоны, когда задача просто ложится на кэш и все?
Не подскажете, существуют ли "лёгкие" open source реализации кэша, которые можно прикрутить на desctop клиент? Работать должны с оперативной памятью. Можно и платные - с этим проблем нет. Ведь синглтоны я использую не от хорошей жизни - просто нужен кэш на клиенте, а синглтон наиболее простое решение, когда делаешь его руками.

я использовал spring + oscache
...
Рейтинг: 0 / 0
static methods VS Singleton
    #34932114
Дуремар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, надо разобраться с этим вопросом. Справочники задача не того калибра, чтобы перепиывать существующий рабочий код, но вот предстоит в ближайшем будущем некоторая задача, где качественный кэш очень даже пригодится...
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / static methods VS Singleton
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]