Философия разработки на примере синглтона

Roy
Уже с Приветом
Posts: 1234
Joined: 24 Nov 1999 10:01
Location: Seattle

Re: Философия разработки на примере синглтона

Post by Roy »

Мальчик-Одуванчик wrote:
Roy wrote:
Alexandr wrote: Очевидно, что тип сиглтона должен быть параметром шаблона :)
Чё-то я не очень понял. Можно поподробнее?
Я это понял примерно так:
К примеру у вас есть некий класс, использующий синглтон.
Параметризуйте этот класс, так чтобы параметром этого шаблона стал синглтон.
И создайте два типа (разных класса с похожим интерфейсом) синглтонов - один для тестов, другой - имеющийся
Тот что для тестов, можно курочить и в хвост и в гриву. К примеру все его члены сделать публичными для более упрощенной
подготовки юнит-тестов.
Как-то слишком сложно. Не проще ли просто передать интерфейс через конструктор и вообще не использовать синглтон в коде (т.е. Dependency Injection)?

Ну то есть синглтон используется только при инициализации, скажем, сервиса, а далее уже везде передаётся только сам обьект, полученный из синглтона.
Roy
Уже с Приветом
Posts: 1234
Joined: 24 Nov 1999 10:01
Location: Seattle

Re: Философия разработки на примере синглтона

Post by Roy »

АццкоМото wrote:
Roy wrote: Любой кто говорит "используйте" или "не используйте" что-либо вне контекста - идиот. А Гугл - мощнейшая тузла для поиска идиотов :pain1:
Вы меня послали в Гугл - Гугл не помог справиться с вопросом. Поэтому ещё раз оброщусь к вам за помощью: "Как тестировать код с синглтоном?". Где вы лично используете синглтоны - в каком контексте? Не спора ради спрашиваю - мне всегда интересны мнения старших товарисчей. Только хотелось бы по-существу ответа, без традиционного сарказма и демагогии.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Философия разработки на примере синглтона

Post by Мальчик-Одуванчик »

Roy wrote:
Мальчик-Одуванчик wrote:
Roy wrote:
Alexandr wrote: Очевидно, что тип сиглтона должен быть параметром шаблона :)
Чё-то я не очень понял. Можно поподробнее?
Я это понял примерно так:
К примеру у вас есть некий класс, использующий синглтон.
Параметризуйте этот класс, так чтобы параметром этого шаблона стал синглтон.
И создайте два типа (разных класса с похожим интерфейсом) синглтонов - один для тестов, другой - имеющийся
Тот что для тестов, можно курочить и в хвост и в гриву. К примеру все его члены сделать публичными для более упрощенной
подготовки юнит-тестов.
Как-то слишком сложно. Не проще ли просто передать интерфейс через конструктор и вообще не использовать синглтон в коде (т.е. Dependency Injection)?

Ну то есть синглтон используется только при инициализации, скажем, сервиса, а далее уже везде передаётся только сам обьект, полученный из синглтона.
По мне как раз проще. Не нужно городить интерфейс, да и те функции, которые не используются в тестах, не нужно реализовывать.
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Философия разработки на примере синглтона

Post by АццкоМото »

Roy wrote:
АццкоМото wrote:
Roy wrote: Любой кто говорит "используйте" или "не используйте" что-либо вне контекста - идиот. А Гугл - мощнейшая тузла для поиска идиотов :pain1:
Вы меня послали в Гугл - Гугл не помог справиться с вопросом. Поэтому ещё раз оброщусь к вам за помощью: "Как тестировать код с синглтоном?". Где вы лично используете синглтоны - в каком контексте? Не спора ради спрашиваю - мне всегда интересны мнения старших товарисчей. Только хотелось бы по-существу ответа, без традиционного сарказма и демагогии.
Я же уже писал
Использую я синглтон только тогда, когда тяжелый объект а) может не понадобиться б) может понадобиться более одного раза. Ничего проще и лучше синглтона для этого не придумано.
Причем, как правило, если все-таки исхитриться создать 17 инстансов - мир не рухнет.
А теперь главная мудрость - я их не тестирую. Тестировать синглтон - только уд тупить. Можно, но нахрена?
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Философия разработки на примере синглтона

Post by АццкоМото »

Roy wrote:Вы меня послали в Гугл - Гугл не помог справиться с вопросом.
http://bit.ly/1v4EXc0
Мат на форуме запрещен, блдж!
X37WAL!^
Уже с Приветом
Posts: 2243
Joined: 28 Nov 2007 23:11
Location: NJ

Re: Философия разработки на примере синглтона

Post by X37WAL!^ »

АццкоМото wrote:
Roy wrote:
АццкоМото wrote:
Roy wrote: Любой кто говорит "используйте" или "не используйте" что-либо вне контекста - идиот. А Гугл - мощнейшая тузла для поиска идиотов :pain1:
Вы меня послали в Гугл - Гугл не помог справиться с вопросом. Поэтому ещё раз оброщусь к вам за помощью: "Как тестировать код с синглтоном?". Где вы лично используете синглтоны - в каком контексте? Не спора ради спрашиваю - мне всегда интересны мнения старших товарисчей. Только хотелось бы по-существу ответа, без традиционного сарказма и демагогии.
Я же уже писал
Использую я синглтон только тогда, когда тяжелый объект а) может не понадобиться б) может понадобиться более одного раза. Ничего проще и лучше синглтона для этого не придумано.
Причем, как правило, если все-таки исхитриться создать 17 инстансов - мир не рухнет.
А теперь главная мудрость - я их не тестирую. Тестировать синглтон - только уд тупить. Можно, но нахрена?
вообще-то вопрос был не "как тестировать синглтон", а "как тестировать код, в котором в числе прочего торчат вызовы синглтонов"?
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Философия разработки на примере синглтона

Post by АццкоМото »

X37WAL!^ wrote:вообще-то вопрос был не "как тестировать синглтон", а "как тестировать код, в котором в числе прочего торчат вызовы синглтонов"?
очевидно, это зависит от контекста
например, если синглтон - это провайдер апп сеттингс, то тестировать можно просто подсовывая в хранилище сеттингов нужную конфигурацию
если синглтон - элемент функциональности а-ля модуль, который используется как-то типа Feedback.getInstance().start(); - то тестируется как раз функциональность самого синглтона (причем знать о том, что это синглтон тестам не нужно), плюс может быть некое инструментальное тестирование самого факта, что модуль запустился.
других вариантов я могу придумать миллион. но.

все это бесполезно, когда местные гении рассуждают о кодировании и тестировании вне контекста
Мат на форуме запрещен, блдж!
X37WAL!^
Уже с Приветом
Posts: 2243
Joined: 28 Nov 2007 23:11
Location: NJ

Re: Философия разработки на примере синглтона

Post by X37WAL!^ »

АццкоМото wrote:
X37WAL!^ wrote:вообще-то вопрос был не "как тестировать синглтон", а "как тестировать код, в котором в числе прочего торчат вызовы синглтонов"?
очевидно, это зависит от контекста
например, если синглтон - это провайдер апп сеттингс, то тестировать можно просто подсовывая в хранилище сеттингов нужную конфигурацию
если синглтон - элемент функциональности а-ля модуль, который используется как-то типа Feedback.getInstance().start(); - то тестируется как раз функциональность самого синглтона (причем знать о том, что это синглтон тестам не нужно), плюс может быть некое инструментальное тестирование самого факта, что модуль запустился.
других вариантов я могу придумать миллион. но.

все это бесполезно, когда местные гении рассуждают о кодировании и тестировании вне контекста
если у нас элемент функциональности а-ля модуль, который используется как-то типа RocketLauncher.GetInstance().Launch() c предварительной проверкой двадцати пяти условий при которых ракету таки позволено запустить, то это нихрена не "тестирование функциональности самого синглтона", это тестирование логики внутри кода, который выдаёт команду на запуск.

В данном случае "инструментальное тестирование" будет выглядеть как загрузка cnn.com и чтение headline news (если данная ракета, конечно, не улетела сразу в Атланту) :)
User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Философия разработки на примере синглтона

Post by Boriskin »

Мальчик-Одуванчик wrote: Зато решается проблемма инициализации зависимых статических классов, реализация которых находится в разных модулях трансляции.
И часто эту 'проблемму' приходится решать? :"":
Тупизна как Энтропия. Неумолимо растет.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Философия разработки на примере синглтона

Post by Мальчик-Одуванчик »

Boriskin wrote:
Мальчик-Одуванчик wrote: Зато решается проблемма инициализации зависимых статических классов, реализация которых находится в разных модулях трансляции.
И часто эту 'проблемму' приходится решать? :"":
Ровно один раз, когда наступаешь на описанные грабли. Дальше зависит от способности не наступать дважды.
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Философия разработки на примере синглтона

Post by АццкоМото »

X37WAL!^ wrote: если у нас элемент функциональности а-ля модуль, который используется как-то типа RocketLauncher.GetInstance().Launch() c предварительной проверкой двадцати пяти условий при которых ракету таки позволено запустить, то это нихрена не "тестирование функциональности самого синглтона", это тестирование логики внутри кода, который выдаёт команду на запуск.
под "тестированием самого синглтона" я имел в виду тестирование функциональности модуля, который сделан синглтоном.
если есть - только что вами придуманные - 25 условий запуска, то их тоже нужно тестировать не заморачиваясь синглтоном и это суть тестирование другого модуля
все просто и логично
Мат на форуме запрещен, блдж!
X37WAL!^
Уже с Приветом
Posts: 2243
Joined: 28 Nov 2007 23:11
Location: NJ

Re: Философия разработки на примере синглтона

Post by X37WAL!^ »

АццкоМото wrote:
X37WAL!^ wrote: если у нас элемент функциональности а-ля модуль, который используется как-то типа RocketLauncher.GetInstance().Launch() c предварительной проверкой двадцати пяти условий при которых ракету таки позволено запустить, то это нихрена не "тестирование функциональности самого синглтона", это тестирование логики внутри кода, который выдаёт команду на запуск.
под "тестированием самого синглтона" я имел в виду тестирование функциональности модуля, который сделан синглтоном.
если есть - только что вами придуманные - 25 условий запуска, то их тоже нужно тестировать не заморачиваясь синглтоном и это суть тестирование другого модуля
все просто и логично
срешшно верно. только вот если у меня в модуле НЕТ обращений к синглтону, а есть инжектнутый интерфейс IRocketLauncher, то тестирование не представляет никаких проблем вообще
а если в коде таки сидит обращение к синглтону, то хрен его обойдёшь в юнит-тесте, будет ракету запускать как побочный эффект тестирования логики разрешения запуска :)
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Философия разработки на примере синглтона

Post by АццкоМото »

X37WAL!^ wrote: срешшно верно. только вот если у меня в модуле НЕТ обращений к синглтону, а есть инжектнутый интерфейс IRocketLauncher, то тестирование не представляет никаких проблем вообще
у меня тоже нет никаких проблем вообще. а вы пишите говно ради "тестирования", я не против
X37WAL!^ wrote:а если в коде таки сидит обращение к синглтону, то хрен его обойдёшь в юнит-тесте, будет ракету запускать как побочный эффект тестирования логики разрешения запуска :)
ну, если руки кривые, то тут уж не обессудьте
Мат на форуме запрещен, блдж!
X37WAL!^
Уже с Приветом
Posts: 2243
Joined: 28 Nov 2007 23:11
Location: NJ

Re: Философия разработки на примере синглтона

Post by X37WAL!^ »

а вы пишите говно ради "тестирования", я не против
ну, если руки кривые, то тут уж не обессудьте
ну наконец-то начался нормальный профессиональный разговор... :great:
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Философия разработки на примере синглтона

Post by АццкоМото »

X37WAL!^ wrote:
а вы пишите говно ради "тестирования", я не против
ну, если руки кривые, то тут уж не обессудьте
ну наконец-то начался нормальный профессиональный разговор... :great:
"профессиональный" разговор начался когда в ход полетели аргументы типа "а я говнокода напишу и мне тестировать будет проще". а я так, огрызаюсь лениво
Мат на форуме запрещен, блдж!
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Философия разработки на примере синглтона

Post by Alexandr »

Мальчик-Одуванчик wrote:
Roy wrote:
Alexandr wrote: Очевидно, что тип сиглтона должен быть параметром шаблона :)
Чё-то я не очень понял. Можно поподробнее?
Я это понял примерно так:
К примеру у вас есть некий класс, использующий синглтон.
Параметризуйте этот класс, так чтобы параметром этого шаблона стал синглтон.
И создайте два типа (разных класса с похожим интерфейсом) синглтонов - один для тестов, другой - имеющийся
Тот что для тестов, можно курочить и в хвост и в гриву. К примеру все его члены сделать публичными для более упрощенной
подготовки юнит-тестов.
exactly :)
User avatar
Kolbasoff
Уже с Приветом
Posts: 3481
Joined: 02 Jan 2005 22:10

Re: Философия разработки на примере синглтона

Post by Kolbasoff »

АццкоМото wrote:Ваше мнение, товарищь Маузер?
Вот еще подкину дровишек с другой стороны, т.е. со стороны БД. Долго хныкал я и услышал меня Господь и дал работу с БигДата. Пока никакой математики, но я надеюсь дойду и до этого со временем. И вот открылось покрывало и увидел я NoSQL (MongoDB). И пока не вкурил, зачем простые вещи делать так сложно?? Вот например SQL to Aggregation Mapping Chart. Сравните по простоте и компактности SQL query и это убожище рядом. И ведь это простейшие запросы, а что будет если запрос по-сложнее? В чем цимес, камрады? Где та волшебная курительная смесь, которая дает просветление?
User avatar
valchkou
Уже с Приветом
Posts: 4185
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Философия разработки на примере синглтона

Post by valchkou »

Kolbasoff wrote: И ведь это простейшие запросы, а что будет если запрос по-сложнее? В чем цимес, камрады? Где та волшебная курительная смесь, которая дает просветление?
Вот! обсуждали не раз, просили не связываться с манго.
другое дело кассандра, там CQL как SQL и joins как таковой отсутствует вообще.
т.е запрос можно делать только к одной таблице
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Философия разработки на примере синглтона

Post by Alexandr »

valchkou wrote:
Kolbasoff wrote: И ведь это простейшие запросы, а что будет если запрос по-сложнее? В чем цимес, камрады? Где та волшебная курительная смесь, которая дает просветление?
Вот! обсуждали не раз, просили не связываться с манго.
другое дело кассандра, там CQL как SQL и joins как таковой отсутствует вообще.
т.е запрос можно делать только к одной таблице
Манго тут не причем, сначала надо курить концепцию о NoSQL, потому как сравнение теплого и мягкого немного не корректно
Знаменитый Фаулер с курением концепции может немного помочь
phpBB [video]
reality
Уже с Приветом
Posts: 256
Joined: 14 Jul 2011 09:07
Location: SaintP -> NYC

Re: Философия разработки на примере синглтона

Post by reality »

Kolbasoff wrote:
АццкоМото wrote:Ваше мнение, товарищь Маузер?
Вот еще подкину дровишек с другой стороны, т.е. со стороны БД. Долго хныкал я и услышал меня Господь и дал работу с БигДата. Пока никакой математики, но я надеюсь дойду и до этого со временем. И вот открылось покрывало и увидел я NoSQL (MongoDB). И пока не вкурил, зачем простые вещи делать так сложно?? Вот например SQL to Aggregation Mapping Chart. Сравните по простоте и компактности SQL query и это убожище рядом. И ведь это простейшие запросы, а что будет если запрос по-сложнее? В чем цимес, камрады? Где та волшебная курительная смесь, которая дает просветление?
Вообще сочувствую, потому что Монго это то еще Г :D Просто походу бюджет на рекламу у них перекрывает все остальные вместе взятые раз в 10
User avatar
Леонид Ильич Брежнев
Уже с Приветом
Posts: 8628
Joined: 22 Mar 2011 01:40

Re: Философия разработки на примере синглтона

Post by Леонид Ильич Брежнев »

Kolbasoff wrote:
АццкоМото wrote:Ваше мнение, товарищь Маузер?
Вот еще подкину дровишек с другой стороны, т.е. со стороны БД. Долго хныкал я и услышал меня Господь и дал работу с БигДата. Пока никакой математики, но я надеюсь дойду и до этого со временем. И вот открылось покрывало и увидел я NoSQL (MongoDB). И пока не вкурил, зачем простые вещи делать так сложно?? Вот например SQL to Aggregation Mapping Chart. Сравните по простоте и компактности SQL query и это убожище рядом. И ведь это простейшие запросы, а что будет если запрос по-сложнее? В чем цимес, камрады? Где та волшебная курительная смесь, которая дает просветление?
Монго надо выкинуть и поставить вместо него Aerospike NoSQL. Нам на той недели на Политбюро приглашенные эксперты по NoSQL рассказывали.
User avatar
valchkou
Уже с Приветом
Posts: 4185
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Философия разработки на примере синглтона

Post by valchkou »

Леонид Ильич Брежнев wrote: Монго надо выкинуть и поставить вместо него Aerospike NoSQL. Нам на той недели на Политбюро приглашенные эксперты по NoSQL рассказывали.
поглядел на их сайт, а там одни лозунги, нормальной документации нет.
Я бы с такими побоялся связываться.
User avatar
fruit6
Уже с Приветом
Posts: 4205
Joined: 10 Jan 2004 01:22
Location: n-sk -> MD -> VA

Re: Философия разработки на примере синглтона

Post by fruit6 »

Леонид Ильич Брежнев wrote:
Kolbasoff wrote:
АццкоМото wrote:Ваше мнение, товарищь Маузер?
Вот еще подкину дровишек с другой стороны, т.е. со стороны БД. Долго хныкал я и услышал меня Господь и дал работу с БигДата. Пока никакой математики, но я надеюсь дойду и до этого со временем. И вот открылось покрывало и увидел я NoSQL (MongoDB). И пока не вкурил, зачем простые вещи делать так сложно?? Вот например SQL to Aggregation Mapping Chart. Сравните по простоте и компактности SQL query и это убожище рядом. И ведь это простейшие запросы, а что будет если запрос по-сложнее? В чем цимес, камрады? Где та волшебная курительная смесь, которая дает просветление?
Монго надо выкинуть и поставить вместо него Aerospike NoSQL. Нам на той недели на Политбюро приглашенные эксперты по NoSQL рассказывали.
Заказывали экспертов, прислали sales
User avatar
Леонид Ильич Брежнев
Уже с Приветом
Posts: 8628
Joined: 22 Mar 2011 01:40

Re: Философия разработки на примере синглтона

Post by Леонид Ильич Брежнев »

valchkou wrote:
Леонид Ильич Брежнев wrote: Монго надо выкинуть и поставить вместо него Aerospike NoSQL. Нам на той недели на Политбюро приглашенные эксперты по NoSQL рассказывали.
поглядел на их сайт, а там одни лозунги, нормальной документации нет.
Я бы с такими побоялся связываться.
Почитай про них получше. Информация на интернете доступна. Они реально много лучше монго. Ключевые слова я тебе дал, дальше уже сам.
ekriv
Уже с Приветом
Posts: 5424
Joined: 19 Jan 2004 23:12
Location: Florida

Re: Философия разработки на примере синглтона

Post by ekriv »

Леонид Ильич Брежнев wrote:
valchkou wrote:
Леонид Ильич Брежнев wrote: Монго надо выкинуть и поставить вместо него Aerospike NoSQL. Нам на той недели на Политбюро приглашенные эксперты по NoSQL рассказывали.
поглядел на их сайт, а там одни лозунги, нормальной документации нет.
Я бы с такими побоялся связываться.
Почитай про них получше. Информация на интернете доступна. Они реально много лучше монго. Ключевые слова я тебе дал, дальше уже сам.
Попробовал установить Aerospike NoSQL на своем хостинге и облом.
Aerospike NoSQL требует 64-бит операционку, а у меня там CentOS 32-bit :(

Return to “Работа и Карьера в IT”