powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Имеет ли право существовать такой подход к сиглетону?
25 сообщений из 306, страница 1 из 13
Имеет ли право существовать такой подход к сиглетону?
    #38198800
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочеться узнать мнение сообщества :) имеет ли право существовать такой подход?:)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    public class Singleton<TClass> where TClass:new()
    {
        protected Singleton() { }
        private sealed class SingletonClassCreator
        {
            private static readonly TClass instance = new TClass();
            public static TClass Instance { get { return instance; } }
        }

        public static TClass Instance
        {
            get { return SingletonClassCreator.Instance; }
        }
    }
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38198813
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,
Нет, singleton должен существовать в единственном экземпляре, а у вас можно на создавать сколько угодно.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38198874
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38198997
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т. е. совместить шаблонный метод и синглтон нельзя?:) но почему?
1) в данном случае все очевидно, для шаблона типа TClass создается единая точка входа
2) код синглтона пишется 1 раз а потом просто подставляются необходимые типы... вместо того чтобы на каждый класс - синглтон прописывать код который подобен коду приведенному в википедии, логика размазывается однако, и поддержка становиться тяжелее
3) при этом сохраняется возможность создать экземпляр класса если очень хочется, т. к. многие ругают синглтон за то что как раз и нельзя создать еще экземпляры
4) да это похоже на фабрику с тем отличием, что в фабрике можно получить много экземпляров а тут только 1
5) Приветствую критику но только конструктивную, а не в "стиле ты не знаешь зачем нужны шаблоны и. т. д.", что такое щаблоны я знаю и в своем коде успешно ими пользуюсь, просто не забывайте что таже банда 4 говорила о том что она предоставляет рекомендации к решениям распространенных задач, а если это только рекомендации то и немного их изменять позволительно, а не так как "шаг влево, шаг в право - побег, прыжок на месте - провокация"
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199013
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВасилий Викторович,
Нет, singleton должен существовать в единственном экземпляре, а у вас можно на создавать сколько угодно.
обьявите protected конструктор в классе который замещает шаблонный тип в данном варианте синглтона и все... вот вам и поведение стандартного синглтона, какие проблемы? обьявить protected конструктор на много проще чем тащить в класс всю инфра структуру синглтона, ладно если подобных класов 1-2 на проект а если их будет штук 10-15? не замучаетесь каждый раз писать одно и тоже?:)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199016
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

1) В Википедии тоже шаблон, они просто не требуют наличия открытого конструктора. Так что видимо вы не читали, но осуждаете.
2) Добавьте в пример на вики | BindingFlags.Public (если не путаю) и можно будет использовать и открытый конструктор
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199019
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович, с конструктором погорячился каюсь, но всеже почему этот вариант плох?:)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199031
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

А в чем, кроме конструктора вы отличия видите?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199035
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович, я не осуждаю код на вики, я просто хочу узнать почему совмещение шаблонного метода и синглтона это плохо :) как мне утверждает ЕвгенийВ :) почему такой подход не имеет права на существование?:)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199041
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович, вот тут 14097964 я описывал преимущества, по моему мнению :), совмещения шаблонного метода и синглтона
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199048
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

Вы сравните ваш код и код на вики. Отличие в том что вы требуете от класса, который будет синглтоном, наличия открытого конструктора. На вики такого требования нет. Расширить их вариант до вашего можно, добавив BindingFlags.Public в вызов коструктора.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199080
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, ты читал 14097964 ?:) я не стремлюсь к открытому конструктору шаблонного типа :) я не хочу 100500 раз писать однотипный код шаблона синглтон когда мне он потребуется :) эххх не получиться из тебя "ленивый" программист
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199088
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

Читал, на вики тоже есть пример с шаблоном, я не могу понять почему вы в нем тех же возможностей не видите.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199091
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович, ваш код - баян. Вот, откопал в старом проекте:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
/// <summary>
/// This is a thread-safe, lazy singleton.
/// See http://www.yoda.arachsys.com/csharp/singleton.html for more details about its implementation.
/// </summary>
public class Singleton<T> where T : new()
{
    protected Singleton()
    {
    }

    public static T Instance
    {
        get { return Nested.SingletInstance; }
    }

    private class Nested
    {
        static Nested()
        {
        }

        internal static readonly T SingletInstance = new T();
    }
}

Советую сходить по ссылке
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199093
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нормальный вариант, для своих задач. Я его использую, когда делаю какой-то прототип или наколенную поделку. То есть, я точно знаю, что каждый сервис будет иметь только одну реализацию и мне не нужны еще какие-то реализации для тестирования.
Вот вариант Singleton, найденный на просторах интернета, мне он больше понравился)):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
    class Singleton<T> where T : class, new()
    {
        Singleton() { }

        private static readonly Lazy<T> instance = new Lazy<T>(() => new T());

        public static T Instance { get { return instance.Value; } }
    }



Ну а если вдруг поделка превратится в что-то стоящее, с реализацией менно такого Singleton легко перепрыгнуть на IoC.
Пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// bootstrapper
var tfsServer = "http://...";
var sqlConnectionInfo = new SqlConnectionInfo { ServerName = @"..." };

Singleton<TraceService>.Instance.Init(sqlConnectionInfo, @"Data\trace.tdf");
Singleton<SqlService>.Instance.Init(sqlConnectionInfo);
Singleton<TfsService>.Instance.Init(tfsServer);

// где-то все это собираем
private TraceService TraceService;
private SqlService SqlService;
private TfsService TfsService;

public Facade()
{
   TraceService = Singleton<TraceService>.Instance;
   SqlService = Singleton<SqlService>.Instance;
   TfsService = Singleton<TfsService>.Instance;
}
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199095
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ на вопрос в заголовке топика - Да.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199098
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983Вот вариант Singleton, найденный на просторах интернета, мне он больше понравился:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
    class Singleton<T> where T : class, new()
    {
        Singleton() { }

        private static readonly Lazy<T> instance = new Lazy<T>(() => new T());

        public static T Instance { get { return instance.Value; } }
    }

Это Sixth version - using .NET 4's Lazy<T> type .
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199099
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, потому что код использует рефлексию, а поверьте моему опыты рефлексия не есть "серебряная пуля", кто любит обвешиваться и поддерживать рефлексию флаг ему в руки
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199107
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причем тут "серебряная пуля"? Чем в данном случае рефлексия хуже вашего варианта?) Я ее тоже не особо люблю, но она гораздо лучше вашего варианта с принудительно открытым конструктором.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199108
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, SerP1983, вам персональное спасибо, единственные адекватные ответы
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199114
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,
Поправка- единственные ответы , которые Вам понравились)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199116
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, нуу... если вам так нравиться рефлексия флаг вам в руки :) видимо вы с не по настоящему не сталкивались и не поддерживали код-лапшу который довольно активно юзал рефлексию :), после такого к данному инструменту я имею прохладное отношение и использую действительно в КРАЙНИХ случаях, а простейший синглтон это не крайний случай
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199123
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть лучше, если ВСЕ мои классы, которые должны быть Синглтонами будут иметь открытый конструктор? XDDDD Флаг вам в руки) А лучше знамя )))
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199139
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchТо есть лучше, если ВСЕ мои классы, которые должны быть Синглтонами будут иметь открытый конструктор? XDDDD Флаг вам в руки) А лучше знамя )))Это Вы Джону Скиту скажите
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199148
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда скинуть?) мне интересно спросить, почему для синглтонов требуется наличие открытого конструктора)
...
Рейтинг: 0 / 0
25 сообщений из 306, страница 1 из 13
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Имеет ли право существовать такой подход к сиглетону?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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