Здравствуйте, _ks_, Вы писали:
__>Всем добр. [время суток].
__>Вот есть тут у нас код, пИсаный пару лет назад. __>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
__>Спасибо заранее ответившим по делу.
Своеобрзная реализация синглтона у Вас ...
Можно кусок кода в студию
Здравствуйте, _ks_, Вы писали:
__>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
Судя по описанию некто прочитал книжку по паттернам, а ума не прибавилось.
Вот есть тут у нас код, пИсаный пару лет назад.
Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
Здравствуйте, _ks_, Вы писали:
__>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
Например, два синглетона могу реализовывать один и тот же интерфейс. И может быть метод, тип одного из параметров которого является этим же интерфейсом. Теперь можно передать в этот метод экземпляр одного или другого синглетона, достигая этим полиморфного поведения. Со статическими классами такое в .NET сделать невозможно.
__>>Вот есть тут у нас код, пИсаный пару лет назад. __>>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
__>>Спасибо заранее ответившим по делу. K>Своеобрзная реализация синглтона у Вас ... K>Можно кусок кода в студию
private MyClass()
{
}
private static MyClass fInstance;
public static MyClass Instance
{
get
{
if (fInstance == null)
fInstance = new MyClass();
return fInstance;
}
}
И потом юзание только через MyClass.Instance.SomeMethod()
__>>>Вот есть тут у нас код, пИсаный пару лет назад. __>>>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
__>>>Спасибо заранее ответившим по делу. K>>Своеобрзная реализация синглтона у Вас ... K>>Можно кусок кода в студию
__>И потом юзание только через MyClass.Instance.SomeMethod()
хм ... стандартная реализация сингетона, было бы неплохо добавить потоко безопастность, но в целом нормально ....
так а "переменных" статических что то я не вижу ... Кстати, под переменными вы имеете ввиду поля? ...
ничто не мешает добавить добавлять не статические поля,свойства,методы и др. ...
Что Вас инетерсует, Вам не понятна реализация синглетона или что?
Здравствуйте, _ks_, Вы писали:
__>Вот есть тут у нас код, пИсаный пару лет назад. __>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
__>Спасибо заранее ответившим по делу.
Здравствуйте, _Morpheus_, Вы писали:
_M_>статики это зло
А почему зло? У меня вот тоже есть класс, котрый служит для преобразования из/в — очень простой и ему не нужен экземпляр класса. Или там есть какие-то подковырки со static?
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, _ks_, Вы писали:
__>>Вот есть тут у нас код, пИсаный пару лет назад. __>>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
__>>Спасибо заранее ответившим по делу.
_M_>статики это зло
__>>И потом юзание только через MyClass.Instance.SomeMethod() K>хм ... стандартная реализация сингетона, было бы неплохо добавить потоко безопастность, но в целом нормально .... K>так а "переменных" статических что то я не вижу ... Кстати, под переменными вы имеете ввиду поля? ... K>ничто не мешает добавить добавлять не статические поля,свойства,методы и др. ... K>Что Вас инетерсует, Вам не понятна реализация синглетона или что?
Меня интересует, почему те, кто начинал писать это дело, ВЕЗДЕ юзают синглотны, где достаточно было обычных статик функций?
И таких вот бесполезных синглтонов сотни!
Здравствуйте, Spender, Вы писали:
_M_>>статики это зло
S>А почему зло? У меня вот тоже есть класс, котрый служит для преобразования из/в — очень простой и ему не нужен экземпляр класса. Или там есть какие-то подковырки со static?
ну вот сделаешь ты переменную static, т.к. якобы незачем ее в экземпляре класса хранить, через некоторое время по коду будет разбросано обращение к этой переменной из разных мест, причем и из таких откуда экземпляр класса не доступен. А потом вдруг окажется что нужно использовать разные значения этой переменной в зависимости от экземпляра класса. Вот тут и начнется головная боль по переделке кучи кода использующего этот класс...
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, _ks_, Вы писали:
__>>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
N>Например, два синглетона могу реализовывать один и тот же интерфейс. И может быть метод, тип одного из параметров которого является этим же интерфейсом. Теперь можно передать в этот метод экземпляр одного или другого синглетона, достигая этим полиморфного поведения. Со статическими классами такое в .NET сделать невозможно.
N>Еще один пример: паттерн Service Locator.
Спасибо за наводку. Но ни то ни другое у нас не используется. Так что вопрос остаётся открытым. Зачем они каждый класс с простым набором методов пихают в синглтон?
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, Spender, Вы писали:
_M_>>>статики это зло
S>>А почему зло? У меня вот тоже есть класс, котрый служит для преобразования из/в — очень простой и ему не нужен экземпляр класса. Или там есть какие-то подковырки со static?
_M_>ну вот сделаешь ты переменную static, т.к. якобы незачем ее в экземпляре класса хранить, через некоторое время по коду будет разбросано обращение к этой переменной из разных мест, причем и из таких откуда экземпляр класса не доступен. А потом вдруг окажется что нужно использовать разные значения этой переменной в зависимости от экземпляра класса. Вот тут и начнется головная боль по переделке кучи кода использующего этот класс...
Хм... В моей ситуации даже статик переменных нету, в каждом из классов просто набор функций. Так что аргумент лично меня не убедил.
Здравствуйте, _Morpheus_, Вы писали:
_M_>ну вот сделаешь ты переменную static, т.к. якобы незачем ее в экземпляре класса хранить, через некоторое время
А я про переменную не говорил. Это же как аналог глобальной переменной — а это зло
Я про класс говорю
Здравствуйте, _ks_, Вы писали:
__>Спасибо за наводку. Но ни то ни другое у нас не используется. Так что вопрос остаётся открытым. Зачем они каждый класс с простым набором методов пихают в синглтон?
Может быть, задел на будущее. А может быть, привычка... Откуда ж я знаю, что у вас имели в виду?
Документация по архитектуре сохранилась?
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, _ks_, Вы писали:
__>>Спасибо за наводку. Но ни то ни другое у нас не используется. Так что вопрос остаётся открытым. Зачем они каждый класс с простым набором методов пихают в синглтон?
N>Может быть, задел на будущее. А может быть, привычка... Откуда ж я знаю, что у вас имели в виду? N>Документация по архитектуре сохранилась?
Кое-что есть, но именно этого там нет. Буду искать встречи с архитекторами.
Здравствуйте, _ks_, Вы писали:
S>>>А почему зло? У меня вот тоже есть класс, котрый служит для преобразования из/в — очень простой и ему не нужен экземпляр класса. Или там есть какие-то подковырки со static?
_M_>>ну вот сделаешь ты переменную static, т.к. якобы незачем ее в экземпляре класса хранить, через некоторое время по коду будет разбросано обращение к этой переменной из разных мест, причем и из таких откуда экземпляр класса не доступен. А потом вдруг окажется что нужно использовать разные значения этой переменной в зависимости от экземпляра класса. Вот тут и начнется головная боль по переделке кучи кода использующего этот класс...
__>Хм... В моей ситуации даже статик переменных нету, в каждом из классов просто набор функций. Так что аргумент лично меня не убедил.
приведу пример:
public class Data
{
public static string Data1 = string.Empty;
public string Data2 = string.Empty;
public void Print()
{
Console.WriteLine(Data1);
Console.WriteLine(Data2);
}
}
public class Program
{
static void Main()
{
doSomeWork();
Data data = new Data();
data.Data2 = "data2";
data.Print();
}
private static void doSomeWork()
{
Data.Data1 = "data1";
}
}
допустим метод doSomeWork это некий код разбросаный по разным классам, в которых экземпляр Data не доступен, а порой и протянуть без нарушения работоспособности или переделки всей структуры кода невозможно.
А теперь вдруг понадобилось создавать экземпляры Data с разными значениями Data1... Прийдется перелопачивать весь код, протягивать экземпляр Data в различные классы, в глубокие методы, которые изначально явно не подразумевали наличие класса Data и потому просто протянуть в них экземпляр Data никак не получится. Это повлечет за собой переделывание структуры объектов, переделывание кода...
А ведь этого можно было избежать, достаточно было не делать Data1 статиком. И тогда весь остальной код и переделывать не пришлось бы...
Здравствуйте, Igor Trofimov, Вы писали:
__>>Так что смысл было делать синглтоны для меня до сих пор неясен. Я ищу ПРИЧИНУ присутствия синглтонов в _моём_ коде.
iT>Может к ним у вас там удаленный доступ имеется (Remoting)?
К синглотонам — нет.
Но!!! Я нашел удивительный комент с родителю этих всех синглтонов: "Все синглтоны должны быть полиморфными классами".
Но на мой вопрос "почему" ответа нет.
Самый очевидный для меня резон написания синглетона на месте статического тулкита — это тесты. Выделив интерфейс синглетона затем его инстанс переменную легко подменять на mock реализацию этого интерфейса в тестах. (вариант — просто наследовать класс и переопрделить mock реализацию нужных методов, но судя по вашему примеру кода это не тот случай). Кроме того синглетон позволяет легко добавлять логику в конструктор — ну например инициализацию кэша. Это как задел на будущее. Да, самый очевидный ответ — ребят просто перло писать приватные конструкторы и никакой мысли у них не было.
Здравствуйте, _ks_, Вы писали:
__>>>Спасибо за наводку. Но ни то ни другое у нас не используется. Так что вопрос остаётся открытым. Зачем они каждый класс с простым набором методов пихают в синглтон?
N>>Может быть, задел на будущее. А может быть, привычка... Откуда ж я знаю, что у вас имели в виду? N>>Документация по архитектуре сохранилась?
__>Кое-что есть, но именно этого там нет. Буду искать встречи с архитекторами.
Нашел одного из них.
Говорит что эти лэеры были сделаны не статическими, чтобы можно былообрабатывать в каждом из них ошибки не стандартными методами, а по-своему.
Т.е. где-то внутри
static MyClass Instace { get; }
должен был быть свой обработчик ошибок. Хотя его нигде нет. Оставили "на потом" и отказались в конце-концов.
__>>>И потом юзание только через MyClass.Instance.SomeMethod() K>>хм ... стандартная реализация сингетона, было бы неплохо добавить потоко безопастность, но в целом нормально .... K>>так а "переменных" статических что то я не вижу ... Кстати, под переменными вы имеете ввиду поля? ... K>>ничто не мешает добавить добавлять не статические поля,свойства,методы и др. ... K>>Что Вас инетерсует, Вам не понятна реализация синглетона или что?
__>Меня интересует, почему те, кто начинал писать это дело, ВЕЗДЕ юзают синглотны, где достаточно было обычных статик функций? __>И таких вот бесполезных синглтонов сотни!
Ну это вопросы к разработчикам ... вообще Синглетон нужен, когда необходимо отслеживать состояние объекта ...
Здравствуйте, _ks_, Вы писали:
__>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
Тут я вижу два момента. Класс и синглетон. С одиночкой авторы-выдумщики сильно промахнулись: никакого оправдания тому, что бы делать класс без состояния одиночкой быть не может. Я такие классы делаю с конструктором по-умолчанию и создаю экземпляры каждый раз перед использованием.
Так же в вашей ситуации можно задуматься: а зачем нам методы делать экземплярными и не сделать ли их статическими? Вот это совсем не обязательно. Как уже сказали, возможно, необходимо пользоваться ремотингом или каким-то ещё механизмом перехвата, который может работать только с методами экземпляра.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
__>>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
_FR>Тут я вижу два момента. Класс и синглетон. С одиночкой авторы-выдумщики сильно промахнулись: никакого оправдания тому, что бы делать класс без состояния одиночкой быть не может. Я такие классы делаю с конструктором по-умолчанию и создаю экземпляры каждый раз перед использованием.
Вот этот абзац не понял.
_FR>Так же в вашей ситуации можно задуматься: а зачем нам методы делать экземплярными и не сделать ли их статическими? Вот это совсем не обязательно. Как уже сказали, возможно, необходимо пользоваться ремотингом или каким-то ещё механизмом перехвата, который может работать только с методами экземпляра.
До архитекторов сего дела удалось достучатся. Говорит что синглтоны нужны были для того, чтобы нестандартно обрабатывать в каждом из таких классов ошибки. Всё.
А т.к. никто в этих классах у нас ошибки не обрабатывает, то эти все синглтоны получаются рудиментом.
Здравствуйте, _ks_, Вы писали:
__>Всем добр. [время суток].
__>Вот есть тут у нас код, пИсаный пару лет назад. __>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
Есть одна. Если для конструирования синглтона нужно что-то нетривиальное, то лучше не делать его статическим.
Потому, что статический конструктор вызывается не более одного раза; если возникло исключение — всё, пипец, все обращения к этому классу в дальнейшем будут вызывать тот же exception. Так что если, к примеру, при инициализации хочется зачитать какой-нибудь файл, то статик — это грабли. Неудачно заблокированный на секунду файл положит приложение до рестарта домена.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, _ks_, Вы писали:
__>>>Каждый класс, который представляет собой набор функций (business/application logic layer), юзается через синглтоны! Почему? Ведь ни один из них не содержит переменных (кроме статиковых). Есть тому разумная причина для .Нет платформы?
_FR>>Тут я вижу два момента. Класс и синглетон. С одиночкой авторы-выдумщики сильно промахнулись: никакого оправдания тому, что бы делать класс без состояния одиночкой быть не может. Я такие классы делаю с конструктором по-умолчанию и создаю экземпляры каждый раз перед использованием.
__>Вот этот абзац не понял.
Синглетон нужен исключительно для того, что бы разные компоненты программы могли иметь доступ к одному и тому же экземпляру класса, то есть к одному и тому же состоянию. Этого можно добиться по-разному и синглетон только один из способов. Следовательно, если класс не имеет состояния (stateless), то синглетон он или нет совершенно не имеет значения (если не брать на ум различые механизмы перехвата вызовов и т.п.).
__>До архитекторов сего дела удалось достучатся. Говорит что синглтоны нужны были для того, чтобы нестандартно обрабатывать в каждом из таких классов ошибки. Всё.
А они могут показать связь между реализацией синглетона и обработкой исключений? Я её не вижу
__>А т.к. никто в этих классах у нас ошибки не обрабатывает, то эти все синглтоны получаются рудиментом.
Я бы для начала разобрался в связи между обработкой исключений и синглетоном.
Help will always be given at Hogwarts to those who ask for it.