powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Имеет ли право существовать такой подход к сиглетону?
25 сообщений из 306, страница 3 из 13
Имеет ли право существовать такой подход к сиглетону?
    #38199350
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Я 10 раз пишу, добавьте к ней | BindingFlags.Public...

А еще лучше, замените рефлексию вот этим:

private static readonly S instance = Activator.CreateInstance(typeof(S), nonPublic: true) as S;
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199353
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА, я понял в чём проблема. ТС хочет одного: чтобы везде в коде, где он вызвал Singleton<MyClass>.Instance, он получил бы один и тотже экземпляр типа MyClass. А там, где он в коде написано new MyClass(), он получил бы разные экземпляры.
А ему говорят, что нельзя такого хотеть.
В принципе такой подход я не рассматривал... но тоже оригинально :)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199354
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий ВикторовичLelouch,

да я боюсь , боюсь... жена и ребенок не требуют моего внимания и времени, я должен конечно убить как минимум пару вечеров чтобы понять а КАК ЖЕ работает эта гребаная, ну или аналогичная ей, строчка кода чтобы иметь возможность туда внести изменения при необходимости, дорогой мой помимо КОДА И КОМПЬЮТЕРА СУЩЕСТВУЕТ И ДРУГОЙ МИР!!!
P. S. пишите код настолько ясно и понятно на сколько это возможно, а рефлексия ... этому не способствует

Зато этому видимо очень способствует добавление способа выстрела себе в ногу путем создания экземпляра класса, который "внезапно" по вашей задумке является синглтоном. Хотите терять время для общения с женой и детьми на поддержку клиентов - ваше право)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199364
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, ну зачем так мрачно то , клиентам не нужно знать КАК именно РЕШАЮТЬСЯ их задачи им нужен готовый РЕЗУЛЬТАТ :), а всю обвертку из десятков и сотен тысяч строк кода им не нужно показывать :), не... кто хочет тот пускай читает исходники я ж не запрещаю... но поверьте моему опыту им это нафиг не сдалось, да и баги есть были и будут всегда, не один человек от этого не застрахован, а по сути вопроса... если я вызову Singleton<TClass>.Instance у него будет поведение такое же как и предпологается у сингелтона :), и все ваши вопли о открытом конструкторе уходят в никуда, а если кто то будет использовать мой код :) ну пусть перед этим читает документацию по коду, и не пугается открытых конструкторов у TClass
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199368
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchВасилий ВикторовичLelouch,

да я боюсь , боюсь... жена и ребенок не требуют моего внимания и времени, я должен конечно убить как минимум пару вечеров чтобы понять а КАК ЖЕ работает эта гребаная, ну или аналогичная ей, строчка кода чтобы иметь возможность туда внести изменения при необходимости, дорогой мой помимо КОДА И КОМПЬЮТЕРА СУЩЕСТВУЕТ И ДРУГОЙ МИР!!!
P. S. пишите код настолько ясно и понятно на сколько это возможно, а рефлексия ... этому не способствует

Зато этому видимо очень способствует добавление способа выстрела себе в ногу путем создания экземпляра класса, который "внезапно" по вашей задумке является синглтоном. Хотите терять время для общения с женой и детьми на поддержку клиентов - ваше право)
и всеже для вас рефлексия - это серебряная пуля от всех проблем... мне вас жаль
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199369
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, вы можете выпускать и библиотеки, я откуда знаю сферу ваших занятий?
Во-вторых, ок, не клиент, а новый сотрудник, который не ожидает такого поведения от Синглтона.
В-третьих, вот вариант без рефлексии:
Код: c#
1.
private static readonly S instance = Activator.CreateInstance(typeof(S), nonPublic: true) as S; 


Или у вас все, что выходит за рамки new MyClass() - уже избыточно?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199373
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

А мне вас, такие проблемы со зрением иметь.. (еще на 1й странице сказал что не люблю рефлексию. Да и читать видимо тяжело, раз 2 страницы МСДН вызывают панику. Заодно и просмотрели способ через Activator в 1 посте на странице)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199376
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий ВикторовичLelouch,

да я боюсь , боюсь... жена и ребенок не требуют моего внимания и времени, я должен конечно убить как минимум пару вечеров чтобы понять а КАК ЖЕ работает эта гребаная, ну или аналогичная ей, строчка кода чтобы иметь возможность туда внести изменения при необходимости, дорогой мой помимо КОДА И КОМПЬЮТЕРА СУЩЕСТВУЕТ И ДРУГОЙ МИР!!!
P. S. пишите код настолько ясно и понятно на сколько это возможно, а рефлексия ... этому не способствует

Правильно написаный код, редко нуждается в исправлении и этим экономит время
Неправильно написаный, является причиной багов, частенько трудно диагностируемых (это я о анти-синглтоне, с открытым конструктором)
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199377
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий ВикторовичLelouch, ну зачем так мрачно то , клиентам не нужно знать КАК именно РЕШАЮТЬСЯ их задачи им нужен готовый РЕЗУЛЬТАТ :), а всю обвертку из десятков и сотен тысяч строк кода им не нужно показывать :), не... кто хочет тот пускай читает исходники я ж не запрещаю... но поверьте моему опыту им это нафиг не сдалось, да и баги есть были и будут всегда, не один человек от этого не застрахован, а по сути вопроса... если я вызову Singleton<TClass>.Instance у него будет поведение такое же как и предпологается у сингелтона :), и все ваши вопли о открытом конструкторе уходят в никуда, а если кто то будет использовать мой код :) ну пусть перед этим читает документацию по коду, и не пугается открытых конструкторов у TClass

вы совсем не понимаете? сказано же выстрел себе в ногу , а не клиенту
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199380
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, против Activator.CreateInstance - я не имею ничего, но вот nonPublic:true явно показывает относиться к чему относиться Activator.CreateInstance, и не надо ля - ля про то что он относиться к пространству имен System, да относиться и что с того ?от перемены сум слагаемых сумма не меняется и рефлексией от этого он быть не перестает :) я вам говорил не про пространство имен System.Reflection а про принципиальный подход, а System.Reflection это просто инструменты, как и всеми инструментами им нужно уметь пользоваться!!!
Повторюсь еще раз Рефлексия в данном случае НЕ ПРЕМЕНИМА!! так как тянет за собой пласт не нужных проблем!!
Хотя что вам расказывать вы же апологет.... серебряной пули
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199381
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation, а ты попробуй изменить подход к шаблонам проектирования :) вдруг понравиться, вдруг поймешь что это не истина в последней инстанции, (черт... чуствую себя змеем искусителем )
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199389
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

Рефлексия неприемлема потому что Василий Викторович ее не осилил) Ок. Я так думаю разговаривать про варианты сделать тоже самое через IoC контейнеры тоже лишнее, ведь они, сволочи, сложно устроены и тут избыточны (c).
P.S. Про строчку, использующую рефлексию Вы говорили, что ее сложно понять и поддерживать. Видимо строчку с активатором тоже сложно понять и поддерживать(мне хватило саммари прочесть - nonPublic = true позволяет использование и закрытого и открытого конструкторов). Так что однозначный вывод - единственный правильный способ, это тот, который вы представили. А то что он вообще не позволяет создать синглтон - это нормально, важнее иметь возможность ничего не читать и не напрягать свою голову, забитую видимо детьми и женой. Я не против такого распределения времени, но смысл вашего поста можно свести к "зацените какой крутой способ, а те, кто говорит что он плох просто мне завидуют".
P.P.S. Съезд на семью и занятость, неспособность посмотреть ссылку на мсдн, "боязнь" перед использованием рефлексии....
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199413
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторовичpation, а ты попробуй изменить подход к шаблонам проектирования :) вдруг понравиться, вдруг поймешь что это не истина в последней инстанции, (черт... чуствую себя змеем искусителем )
откуда ты знаешь какой у меня к ним подход?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199425
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

IMHO, Вам пытаются доказать, что шаблон Singleton не подразумевает наличия public конструктора, т.к. это в корне отличается от задумки именно ЭТОГО ШАБЛОНА, а Вы упорно пытаетесь доказать, что мир развивается, а посему х..рить шаблон можно, но пусть он при этом обзывается Singleton и используется как Singleton...

И не лень было лопатить три страницы переливая из пустого в порожнее?

Опять-же введя public конструктор, Вы порождаете ВОЗМОЖНОСТЬ создания второго экземпляра объекта и тем самым, опять-же, перечёркиваете идею именно этого шаблона...

Ну если так хочется именно такое поведение, то не называйте это Singleton, назовите SemiSingleton... Тогда будет более понятно, что это такой хитровыкрученный класс, который вроде как и синглтон, но в то-же время имеет открытый конструктор (вот где в данном случае для шаблона синглтон, выстрел себе в ногу), который не желательно использовать ( и спрашивается, а занафига тогда он, этот открытый конструктор нужен, если его использовать нельзя ??? ).

В общем, отвечу на поставленный вопрос так: имеет, покуда голова у того кто пользует такой шаблон на месте и абсолютно чётко осознаёт, что кто-нибудь (возможно даже из его команды) не сделает просто:
Код: c#
1.
2.
3.
...
MySemiSingleton<MySuperClass> mySuperObject = new MySemiSingleton<MySuperClass>();
...


вместо:
Код: c#
1.
2.
3.
...
MySemiSingleton<MySuperClass> mySuperObject = MySemiSingleton<MySuperClass>.Instance;
...



Так что если есть желание херить шаблон - вперёд, но только не говорите, что это Singleton и будьте готовы к беготне за жуками в будущем...
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199442
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov, скажите мне, что означает следующая строчка из кода ТС:
Код: c#
1.
protected Singleton() { }

Каким образом получится создать new Singleton<MySuperClass>()?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199455
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Синглтоном должен вообще-то быть MyClass. В примере на вики например, чтобы не смущать, используют наследование.
P.S. Поясните мне смысл такого "синглтона", который вы только что нарисовали?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199461
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, смысл этих примеров с генериками в том, чтобы получить ссылку на единственный объект параметра типа (T, TSource, etc), а не на сам Singleton<TSource>. Из кода это не очевидно?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199480
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, берём код с вики и пишем:
Код: 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.
using System;
using System.Reflection;

namespace SingletonApplication
{
    /// Вот мой класс, он не наследник Singleton<T>
    public class MyClass
    {
        private MyClass()
        {
        }

        public static MyClass Create()
        {
            return new MyClass();
        }

        public override string ToString()
        {
            return String.Format("Hello form MyClass with hash code: {0}!", GetHashCode());
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Singleton<MyClass>.Instance);
            Console.WriteLine(MyClass.Create());
            Console.WriteLine(Singleton<MyClass>.Instance);
            Console.WriteLine(MyClass.Create());
            Console.ReadKey();
        }
    }

    /// generic Singleton<T> (потокобезопасный с использованием generic-класса и с отложенной инициализацией)
    /// <typeparam name="T">Singleton class</typeparam>
    public class Singleton<T> where T : class
    {
        /// Защищённый конструктор необходим для того, чтобы предотвратить создание экземпляра класса Singleton. 
        /// Он будет вызван из закрытого конструктора наследственного класса.
        protected Singleton() { }

        /// Фабрика используется для отложенной инициализации экземпляра класса
        private sealed class SingletonCreator<S> where S : class
        {
            //Используется Reflection для создания экземпляра класса без публичного конструктора
            private static readonly S instance = (S)typeof(S).GetConstructor(
                        BindingFlags.Instance | BindingFlags.NonPublic,
                        null,
                        new Type[ 0 ],
                        new ParameterModifier[ 0 ]).Invoke(null);

            public static S CreatorInstance
            {
                get { return instance; }
            }
        }

        public static T Instance
        {
            get { return SingletonCreator<T>.CreatorInstance; }
        }

    }
}

И кто кому что должен? И что, и где очевидно?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199483
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchВообще, смысл этих примеров с генериками в том, чтобы получить ссылку на единственный объект параметра типа (T, TSource, etc), а не на сам Singleton<TSource>. Из кода это не очевидно?Смотрите мой код выше. Вызов Singleton<MyClass>.Instance - это не ссылка на единственный объект параметра типа MyClass? Если конструктор типа MyClass сделать публичным, а реализацию Singleton<T> с вики заменить на реализацию ТС, ссылка будет не на единственный объект?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199504
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

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

А что в вашем примере MyClass синглтон, да? Статический метод Create вас не смущает?Нет, MyClass не синглтон. Статический метод Create меня не смущает.
Вы мне ответьте на мои вопросы, будьте любезны.
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199537
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
/// <typeparam name="T">Singleton class</typeparam>
public class Singleton<T> where T : class
{
  /// Защищённый конструктор необходим для того, чтобы предотвратить создание экземпляра класса Singleton. 
  /// Он будет вызван из закрытого конструктора наследственного класса.
  protected Singleton() { }
 
  /// Фабрика используется для отложенной инициализации экземпляра класса
  private sealed class SingletonCreator<S> where S : class
  {
    //Используется Reflection для создания экземпляра класса без публичного конструктора
    private static readonly S instance = (S) typeof(S).GetConstructor(
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new Type[0],
                new ParameterModifier[0]).Invoke(null);
 
    public static S CreatorInstance
    {
      get { return instance; }
    }
  }
 
  public static T Instance
  {
    get { return SingletonCreator<T>.CreatorInstance; }
  }
 
}
 
/// Использование Singleton
public class TestClass : Singleton<TestClass>
{
    /// Вызовет защищенный конструктор класса Singleton
    private TestClass() { }
 
    public string TestProc()
    {
        return "Hello World";
    }
}


На всякий случай сообщаю, что конец примера находится под комментарием "Использование Singleton"
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199541
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ на ваш вопрос - ни то ни то не будет синглтоном
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199545
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch, и где использование-то, Вы видите? Где вызов TestProc()? Чем отличается вызов TestClass.Instance от Singleton<TestClass>.Instance? Зачем наследовать TestClass от Singleton<TestClass>?
В моём примере я использовал код с вики так Singleton<MyClass>.Instance. Это означает, что я использовал не Singleton?
...
Рейтинг: 0 / 0
Имеет ли право существовать такой подход к сиглетону?
    #38199548
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchОтвет на ваш вопрос - ни то ни то не будет синглтономА ссылка-то, ссылка будет на единственный объект параметра типа MyClass?
...
Рейтинг: 0 / 0
25 сообщений из 306, страница 3 из 13
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Имеет ли право существовать такой подход к сиглетону?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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