Re[7]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 16:32
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Может я чего-то и не догоняю, но в том что ты описал я не увидел особого отличия от паттерна Service Layer. И сделать сервис-провайдер синглетоном вполне может оказаться куда более удобным чем передача его экземпляра. Т.е. во всем что ты описал — аналог собственно синглтона это та самая "передача экмзепляра", которую вполне и без сервис лаера можно использовать и считать это чем-то более продвинутым чем синглетон мне кажется несколько затруднительным.

Правда? А может ты мне объяснишь как сделать на синглетоне то что я описал.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Singleton против static class c# 2
От: Варвар США  
Дата: 17.05.06 16:49
Оценка:
Здравствуйте, WolfHound, Вы писали:


WH>Зачем IComponent'у IDisposable?

Думаю что бы выбросить самого себя из site. Как я понимаю компонент можно добавить в контейнер его собственного сайта как делается в Dependency Injection, и тогда нужно удалять себя оттуда перед тем как удалиться.

public class Component : MarshalByRefObject, IComponent, IDisposable
{
...
public void Dispose()
{
      this.Dispose(true);
      GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
      if (disposing)
      {
            lock (this)
            {
                  if ((this.site != null) && (this.site.Container != null))
                  {
                        this.site.Container.Remove(this);
                  }
...
            }
      }
}


...
}




WH>Зачем ISite'у Name и DesignMode?

Понятия не имею
И вместо сердца каменный топор...
Re[10]: Singleton против static class c# 2
От: _FRED_ Черногория
Дата: 17.05.06 16:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

_FR>>Нет, как раз не "протаптывать", а обращаться к тому, какой нужен, раз уж они заранее известны. Просто в приведённой реализации пропадает самая соль "ServiceProvider`а", которая, имхо, в том, что типы (параметра GetService(…) и экземпляра) должны сравниваться не на равенство, а на реализацию, примерно так:

WH>То что ты написал это детали реализации которая может быть сколь угодно наворочена. Ничего принципиально они не меняют.

Точно. Увлёкся :о) Попробую ближе к теме:

При использовании такого подхода удалось ли Вам полностью избавиться от синглетонов? Если синглетоны всё же были, то по каким признакам класс попадал в разряд сервисов или "одиночек"?
... << RSDN@Home 1.2.0 alpha rev. 650>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[8]: Singleton против static class c# 2
От: _FRED_ Черногория
Дата: 17.05.06 16:58
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Правда? А может ты мне объяснишь как сделать на синглетоне то что я описал.


То, что написал ты, как раз можно, поскольку набор сервисов заранее известен, дело только за "протаптывать его во всех контекстах". И, в принципе, не всегда можно добавить "лишний параметр метода или конструктора"

Но мне предложенная тобой идея тоже сильно понравилась
... << RSDN@Home 1.2.0 alpha rev. 650>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[9]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 17:25
Оценка:
Здравствуйте, Варвар, Вы писали:

WH>>Зачем IComponent'у IDisposable?

В>Думаю что бы выбросить самого себя из site. Как я понимаю компонент можно добавить в контейнер его собственного сайта как делается в Dependency Injection, и тогда нужно удалять себя оттуда перед тем как удалиться.
А если компонент не управляет собственной судьбой? Например еонтейнер сам по запросу сканирует лежащие в нем компоненты и по определенным признакам выкидывает?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 17:25
Оценка: :))
Здравствуйте, _FRED_, Вы писали:

_FR>При использовании такого подхода удалось ли Вам полностью избавиться от синглетонов?

Да. Удалось.
_FR>Если синглетоны всё же были,
Был они класс с кучей static методов которые читали и анализировали метаинформацию типов. Потом в этот класс добавили несколько кешей для того чтобы рефлекшен лишний раз не трогать. Была мысль превратить и его в сервис но омобого смысла в этом небыло да и других задач хватало.
_FR>то по каким признакам класс попадал в разряд сервисов или "одиночек"?
По глупости.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 17:31
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>То, что написал ты, как раз можно, поскольку набор сервисов заранее известен, дело только за "протаптывать его во всех контекстах".

Как сделать так чтобы на корне могло быть несколько сессий? В каждой сессии могло быть несколько отображений? При этом у каждой сессии и отображения должна быть своя копия сервисов.

_FR>И, в принципе, не всегда можно добавить "лишний параметр метода или конструктора"

Просто проектировать нужно в расчете на это.
Кстати Варвар дал хорошую ссылку в этом
Автор: Варвар
Дата: 16.05.06
сообщении. ИМХО неплохое чтиво хотя я и не со всем согласен.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Singleton против static class c# 2
От: Воронков Василий Россия  
Дата: 17.05.06 17:38
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Правда? А может ты мне объяснишь как сделать на синглетоне то что я описал.


Сделать сервис-провайдер синглетоном?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 17:47
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

WH>>Правда? А может ты мне объяснишь как сделать на синглетоне то что я описал.

ВВ>Сделать сервис-провайдер синглетоном?
И? Как ты для каждой сессии заведешь свою копию сервисов уровня сессии?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Singleton против static class c# 2
От: Воронков Василий Россия  
Дата: 17.05.06 17:53
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>И? Как ты для каждой сессии заведешь свою копию сервисов уровня сессии?


Гм, тебе не кажется что это уже другой вопрос и к синглетону как таковому отношения не имеет? Все что я хотел сказать — это то что сервис провайдер как таковой никак не противоречит синглетону ни в классическом его смысле, ни в неклассическом (см. например ремотинг, куда этот паттерн прекрасно подходит).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 18:06
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Гм, тебе не кажется что это уже другой вопрос и к синглетону как таковому отношения не имеет? Все что я хотел сказать — это то что сервис провайдер как таковой никак не противоречит синглетону ни в классическом его смысле, ни в неклассическом (см. например ремотинг, куда этот паттерн прекрасно подходит).

Нет не кажется. Как ты думаешь почему я и не только я послал синглитоны в лес?
Просто по тому что они очень сильно связывают программу, а сильная связанность ничего кроме гемороя не дает.
Например смотри мое сообщение
Автор: WolfHound
Дата: 16.05.06
как ты думаешь если бы логер сделали синглитоном (что очень часто с ним и делают) то можно было бы также легко добавить информацию о сессии в контексте которой происходит запись в лог?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Singleton против static class c# 2
От: Воронков Василий Россия  
Дата: 17.05.06 18:35
Оценка: 6 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Нет не кажется. Как ты думаешь почему я и не только я послал синглитоны в лес?

WH>Просто по тому что они очень сильно связывают программу, а сильная связанность ничего кроме гемороя не дает.

Т.е. то что ты предлагаешь — это универсальное решение, которое всегда можно и нужно использовать вместо синглетонов? В противном случае я не понимаю, о чем спор.

WH>Например смотри мое сообщение
Автор: WolfHound
Дата: 16.05.06
как ты думаешь если бы логер сделали синглитоном (что очень часто с ним и делают) то можно было бы также легко добавить информацию о сессии в контексте которой происходит запись в лог?


Прекрасно. Никто же не говорит, что нужно всегда использовать синглтоны. Приводить примеры где синглтон будет кстати? Просто ты привел решение, которое никак не заменяет и вообще полностью перпендикулярно синглтонам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 18:38
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Т.е. то что ты предлагаешь — это универсальное решение, которое всегда можно и нужно использовать вместо синглетонов? В противном случае я не понимаю, о чем спор.

Именно.

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

Попробуй.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Singleton против static class c# 2
От: Воронков Василий Россия  
Дата: 17.05.06 18:51
Оценка: 1 (1)
Здравствуйте, WolfHound, Вы писали:

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

WH>Попробуй.

Да все очень просто — требуется глобальный инстанс в домене (или даже не только в домене) приложения. Примеры — файл конфига, глобальный сервис провайдер (например, в случае если этот паттерн используется при работе с плагинами), сервис ремотинг, фасад слоя доступа к данным и пр.
Как только мы попробуем сущности, изначально расчитанные на "общий" доступ, передвать каким-либо образом вместо того, чтобы делать их статиками/синглетонами, то свяжем весь остальной код не меньше, обязав его следовать определенному контракту — реализовывать специальным образом конструктор или определять специальный метод — что тоже особенно не весело.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 19:32
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Да все очень просто — требуется глобальный инстанс в домене (или даже не только в домене) приложения.

Эта модель не препятствует сервису быть в одном экземпляре.
ВВ>Примеры — файл конфига,
Допустим мы пишем IDE... на каждый проект по проектному файлу...
А если программа поддерживает несколько пользователей? А если эти пользователи могут быть залогинины одновременно?
Так сколько у нас конфигов?
ВВ>глобальный сервис провайдер (например, в случае если этот паттерн используется при работе с плагинами),
Ну да конечно, а про то что у нас в разных проектах разные языки программирования и им нужен разный интелисенс мы и забыли.
ВВ>сервис ремотинг,
С ним дел не имел.
ВВ>фасад слоя доступа к данным и пр.
Вот ведь как нехорошо то получается... некоторые сесии хотят чтобы обращения к базе логировались... другие хотят блокировать некоторые запросы которые идут от бизнес логики, а третьи сессии вот ведь гады какие полезли в другую базу...

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

Тут два варианта
1)Использовать синглетоны и статики:
+Меньши возьни в тривиальных случаях.
-Вешалка в нетривиальных случаях.
2)Использовать то что я описал:
-Больше возьни в тривиальных случаях.
+Можно разрулить большинство нетривиальных случаев не напрягаясь.

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

Итого: Никаких принципиальный преймущест синглитонов ты так и не продемонстрировал.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Singleton против static class c# 2
От: Воронков Василий Россия  
Дата: 17.05.06 19:51
Оценка: 3 (1) +1
Здравствуйте, WolfHound, Вы писали:

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


А вот если нет таких сессий? И приложение однопользовательское — или уж, во всяком случае, не допускает несколько одновременно залогиненных пользователей? И что-то мне сдается, что это куда более распространенный вариант, чем ты описываешь.
Ни разу кстати не писал локальный дата-лаер с которым работает одновременно несколько различных сессий с разными требованиями к фунцкиональности.

WH>Не знаю как у тебя, а у меня встречаются все больше нетривиальные случаи. К томуже если мы уж начали использовать такую схему то она в любом случае прошьет всю программу... и тогда уж точно не будет никакого смысла использовать синглетоны.


А у меня — наоборот — больше тривиальные. В итоге — нашли ли мы silver bullet?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 19:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

_FR>>то по каким признакам класс попадал в разряд сервисов или "одиночек"?

WH>По глупости.
Имеется в виду в разряд "одиночек" по глупости.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Singleton против static class c# 2
От: WolfHound  
Дата: 17.05.06 20:37
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А вот если нет таких сессий? И приложение однопользовательское — или уж, во всяком случае, не допускает несколько одновременно залогиненных пользователей? И что-то мне сдается, что это куда более распространенный вариант, чем ты описываешь.

Не будет сессий будет что-то другое что без такой механики делаль задолбаешься. А если уж завели эту механику то...
ВВ>Ни разу кстати не писал локальный дата-лаер с которым работает одновременно несколько различных сессий с разными требованиями к фунцкиональности.
А у меня было. И кто сказал что это обязательно должен быть клиент? Может это сервер?

ВВ>А у меня — наоборот — больше тривиальные. В итоге — нашли ли мы silver bullet?

Их как извесно не бывает. Вот только я предпочитаю ходить с пистолетом даже если в нем обыкновенные пули нежели с дубинкой.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: Singleton против static class c# 2
От: Варвар США  
Дата: 17.05.06 21:03
Оценка: 1 (1) +1
Вообще то тема не о том, пользоваться синглтонами или нет, а о том что если уж пользоваться, то делать их классическими, или же просто статическими функциями. Я за статики, хотя для частных случаев классики тоже имеют право на жизнь

ЗЫ. Можно разделить тему и продолжить в отдельной ветке обсуждать component-conteiner-service модель.
И вместо сердца каменный топор...
Re[10]: Singleton против static class c# 2
От: _FRED_ Черногория
Дата: 18.05.06 07:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

_FR>>То, что написал ты, как раз можно, поскольку набор сервисов заранее известен, дело только за "протаптывать его во всех контекстах".

WH>Как сделать так чтобы на корне могло быть несколько сессий? В каждой сессии могло быть несколько отображений? При этом у каждой сессии и отображения должна быть своя копия сервисов.

Да, например, синглетоном иметь словарь — сессия — что-то ещё Ну это и впрямь не так важно.

_FR>>И, в принципе, не всегда можно добавить "лишний параметр метода или конструктора"

WH>Просто проектировать нужно в расчете на это.

Мне очень понравилось то, как это сделано через ObjectBuilder в EnterprizeLibrary — никаких лишних параметров, только открытые свойства, аттрибуты которых говорят о том, что в них нужно записать при построении объекта.

WH>Кстати Варвар дал хорошую ссылку в этом
Автор: Варвар
Дата: 16.05.06
сообщении. ИМХО неплохое чтиво хотя я и не со всем согласен.


Конечно.

Но мне во всём этом не нравится только одно — необходимость проверки возвращённого GetService(…) значения на null
... << RSDN@Home 1.2.0 alpha rev. 650>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.