powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Имеет ли право существовать такой подход к сиглетону?
25 сообщений из 306, страница 11 из 13
Имеет ли право существовать такой подход к сиглетону?
    #38201768
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAlex KuznetsovIMHO - если много в проекте singleton-ов - переделывай архитектуру ибо кривая она возможно...Возможно, или кривая? Если кривая - то в каких случаях? Как количество синглетонов влияет на прямоту архитектуры?Возможно кривая
За количество сильно не скажу, т.к. не было у меня проектов, где-бы мне приходилось использовать больше 5 Singleton-ов.

А у Вас такие проекты были? Просто хочется понять практичность...
PS. Прошу без срача и личных оскорблений, просто и по делу...
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38201858
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovПросто хочется понять практичность...Для этого нужно сравнить с аналогами:

1. static class с некоторыми оговорками.
2. DI-контейнер.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38201863
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovВозможно криваяАрхитектура не может быть "возможно кривая". Она или кривая, или нет.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202043
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovskyANAпропущено...
Кхм... Чё?Кхм... - это мнение моё.... о практичности такого подхода к синглтонам...
Корячиться с Generic-ами для того чтобы работать с шаблоном Singleton - по мне, так я для этого ленивый...Реализация на вики тоже с Generic-ами. А есть реализация через Lazy. Выбирайте, что Вам подходит. ТС вот Выбрал и не заметно, что особо корячится с этим.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202083
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAРеализация на вики тоже с Generic-ами. А есть реализация через Lazy. Выбирайте, что Вам подходит. ТС вот Выбрал и не заметно, что особо корячится с этим. Да я и не собираюсь шубу на плечи через ноги одевать.
Я как-то так привык:
по старинке
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public class MySingletonClass
    {
        private static MySingletonClass fSingleton = null; 

        private MySingletonClass()
        {
           ...
        }

        public static MySingletonClass SingletonInstance
        {
            get
            {
                if (fSingleton == null) fSingleton = new MySingletonClass();
                return fSingleton;
            }
        }
     ...
    }


Опять-же я не отрицаю возможности использования Generics для реализации шаблона Singleton....
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202099
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov, а какую реализацию Вы посоветуете, если где-то нужен синглтон инстанс класса, а где-то обычный?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202168
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAAlex Kuznetsov, а какую реализацию Вы посоветуете, если где-то нужен синглтон инстанс класса, а где-то обычный?
предложение противоречит само себе
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202174
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAAlex Kuznetsov, а какую реализацию Вы посоветуете, если где-то нужен синглтон инстанс класса, а где-то обычный?skyANA, наводящий вопрос: что значит где-то? Это одно приложение или универсальная библиотека, которая может применяться для разных случаев? И в зависимости от применения библиотеки мы можем использовать либо синглтон, либо работать с ним как с обычным классом?

Если это библиотека, то в документации к ней должно быть жирным по белому указано, что есть такая фича и Вы используете её на свой страх и риск и несёте за это ответственность.
Но согласитесь, что это будет уже не чистый синглтон.

А в одном единственном приложении порождать синглтон и такой-же не синглтон.... Ну тогда сильно необходимо ужесточить контроль над использованием разделяемых ресурсов... И опять-же это тоже не будет чистым синглтоном...
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202181
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov, вижу, что Вы плохо следили за дискуссией.
В desktop-клиенте нужен синглтон инстанс класса, в web-клиенте нет. Что предложите?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202186
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Unity же предоставляет такую возможность. Как бы Вы реализовали?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202231
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAAlex Kuznetsov, вижу, что Вы плохо следили за дискуссией. Здесь Вы не правы... По моему мой предыдущий ответ как раз таки и раскрывает ответ на Ваш следующий вопрос (он и был написан исходя из Ваших же ранних предложений)...
skyANAВ desktop-клиенте нужен синглтон инстанс класса, в web-клиенте нет. Что предложите?

Повторю ещё раз: подход описанный ТС имеет право на существование ( я этого нигде не отрицал ), просто надо называть вещи своими именами... Это уже не будет ЧИСТЫМ Singleton. Или Вы не согласны с таким утверждением?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202245
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovskyANAAlex Kuznetsov, вижу, что Вы плохо следили за дискуссией. Здесь Вы не правы... По моему мой предыдущий ответ как раз таки и раскрывает ответ на Ваш следующий вопрос (он и был написан исходя из Ваших же ранних предложений)...
skyANAВ desktop-клиенте нужен синглтон инстанс класса, в web-клиенте нет. Что предложите?

Повторю ещё раз: подход описанный ТС имеет право на существование ( я этого нигде не отрицал ), просто надо называть вещи своими именами... Это уже не будет ЧИСТЫМ Singleton. Или Вы не согласны с таким утверждением?Ну в реализации Unity также употребляется термин singleton, и насколько ЧИСТА та реализация никого почему-то не волнует.

Реализация ТСа потокобезопасна и позволяет ему решать свои задачи без лишних телодвижений, следовательно ответ: Да.
Тему думаю можно закрывать.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202302
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

следовательно ответ: да, но это не синглтон, а удобная ТСу реализация чего-то там)
Приведите пример, что на клиенте должно вести себя как синглтон, а на сервере позволять множественное создание? Что мешает вам с помощью наследования сделать из обычного класса синглтон, закрыв конструктор, добавив реализацию статического свойства Instance?
P.S. Немного подумав: Использование Unity не делает класс синглтоном (пока он имеет открытый конструктор), обеспечивая лишь такое-же поведение как недореализация ТСа.
P.P.S. В n-й раз: Реализация ТСа плоха, в том числе, тем, что Требует от MyClass наличия открытого конструктора. То есть, если я, как разработчик MyClass, уверен что он должен быть синглтоном, то я не могу этого обеспечить, и оставляю на откуп дяде Васе, что он никогда не создаст его экземпляр.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202306
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAUnity же предоставляет такую возможность. Как бы Вы реализовали?
Без использования Unity могу предложить реализовать что-то типа вот такого:
через базовый абстрактный класс, реализующий бизнес логику
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
using System;

namespace PseudoSingleton
{
    public abstract class MyBasePseudoSingleton // Он находится типа в библиотеке
    {
        private int fInternalValue = 0;

        public string SampleMethod()
        {
            return String.Format("Sample String {0}",fInternalValue);
        }

        public void setInternalValue(int aValue)
        {
            fInternalValue = aValue;
        }
    }

    public class SingletonClass : MyBasePseudoSingleton // реализуется в Desktop
    {
        private static SingletonClass fInstance = null;

        private SingletonClass():base()
        {
        }

        public static SingletonClass Instance
        {
            get { if (fInstance == null) fInstance = new SingletonClass(); return fInstance; }
        }
    }

    public class NonSingletonClass : MyBasePseudoSingleton // Реализуется в WEB
    {
    }

    class Program
    {
        static void Main(string[] args)
        {
            SingletonClass sc = SingletonClass.Instance;
            NonSingletonClass nsc = new NonSingletonClass();

            sc.setInternalValue(10);

            nsc.setInternalValue(20);
            Console.WriteLine(String.Format("{0} - {1}", sc.GetType(), sc.SampleMethod()));
            Console.WriteLine(String.Format("{0} - {1}", nsc.GetType(), nsc.SampleMethod()));

            Console.WriteLine("--------------------------------------------------");

            nsc.setInternalValue(30);
            Console.WriteLine(String.Format("{0} - {1}", sc.GetType(), sc.SampleMethod()));
            Console.WriteLine(String.Format("{0} - {1}", nsc.GetType(), nsc.SampleMethod()));

            /*********************************************************************
            * Вот этот кусок не откомпилируется - 
            * PseudoSingleton.SingletonClass.SingletonClass() недоступен из-за его уровня защиты
            **********************************************************************/
            SingletonClass sc2 = new SingletonClass();
            sc2.setInternalValue(30);
            Console.WriteLine(String.Format("{0} - {1}", sc2.GetType(), sc2.SampleMethod()));
            /*********************************************************************/

            Console.ReadLine();
        }
    }
}


Ну и понятно, что MyBasePseudoSingleton никоим образом не реализует шаблон Singleton.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202467
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchskyANA,

следовательно ответ: да, но это не синглтон, а удобная ТСу реализация чего-то там)
Приведите пример, что на клиенте должно вести себя как синглтон, а на сервере позволять множественное создание? Что мешает вам с помощью наследования сделать из обычного класса синглтон, закрыв конструктор, добавив реализацию статического свойства Instance?
P.S. Немного подумав: Использование Unity не делает класс синглтоном (пока он имеет открытый конструктор), обеспечивая лишь такое-же поведение как недореализация ТСа.
P.P.S. В n-й раз: Реализация ТСа плоха, в том числе, тем, что Требует от MyClass наличия открытого конструктора. То есть, если я, как разработчик MyClass, уверен что он должен быть синглтоном, то я не могу этого обеспечить, и оставляю на откуп дяде Васе, что он никогда не создаст его экземпляр.У ТС MyClass реализует некую бизнес-логику. А уж как эта логика используется, как Singleton, или как Singlecall, от класса не зависит.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202503
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Если эта логика должна быть реализована как синглтон и никак иначе, то что мне делать с реализацией ТСа? Она мне этого не обеспечит
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202522
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, ну Вы же используете Unity, одной строкой Вы делаете то, что Вам надо, при этом класс Logger ни фига не синглтон и может быть создан через фабрику.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202526
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но так как у вас принято соглашение работать только через IoC, то Вас это не волнует.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202559
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Во-первых, у него теперь закрытый конструктор)
Во-вторых, я не прихожу на форум со словами "зацените мою реализацию синглтона", понимая, что опираюсь именно на договоренность работы через Unity.
В-третьих, реализация ТС ограничивает мои возможности создать синглтон
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202582
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз обращаю ваше внимание:
вики Гарантирует , что у класса есть только один экземпляр.
Реализация ТС не только не гарантирует этого, она требует разрешить создание объектов (открытый конструктор). О каком синглтоне может идти речь?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202724
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchskyANA,

Во-первых, у него теперь закрытый конструктор)У кого у него? :) Вы прикалываетесь? Обновил версию Unity - перепиши свои классы! Они устрианили ошибку, что возникала, если конструктор НЕ открытый. То есть с открытым конструктором всё прекрасно работало, и я думаю и сейчас также прекрасно продолжает работать.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202785
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Можете и не переписывать. К теме относится слабо.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202791
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Прикалываетесь тут вы, называя наличие свойства, возвращающего ссылку на глобальный экземпляр MyClass синглтоном MyClass
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202840
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchskyANA,

Можете и не переписывать. К теме относится слабо.Почему слабо? Реализация Unity также не гарантирует, что класс не будет создан через прямой вызов конструктора, или через фабрику. Однако на практике это мало кого волнует.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38202845
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAчто класс экземпляр класса не будет создан через прямой вызов конструктора, или через фабрику
...
Рейтинг: 0 / 0
25 сообщений из 306, страница 11 из 13
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Имеет ли право существовать такой подход к сиглетону?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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