powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / делегаты
25 сообщений из 152, страница 2 из 7
делегаты
    #38456288
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу да. А сейчас что не так? Где хардкод?
Есть реализация, что одинакого работает и в Win, и в Web клиенте. Нет необходимости писать две различные реализации.

тогда зачем делегат?
...
Рейтинг: 0 / 0
делегаты
    #38456318
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНу да. А сейчас что не так? Где хардкод?
Есть реализация, что одинакого работает и в Win, и в Web клиенте. Нет необходимости писать две различные реализации.

тогда зачем делегат?Эххх... Плохо пример написал. Некий класс следит за активностью пользователя, обсёрвит различные события, запоминает время последней активности (в памяти, в сессии, в базе, не важно).
Пользователя вдруг дёргают (допустим это врач, его вызывают на операцию). Врач уходит. Через 15 минут в кабинет заходит любопытная уборщица и лезет смотреть, что же там делал врач.

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

Сам он ясен пень не может чистить куки, редиректить на страницу логина, открывать диалоги. Он делегирует это.
Если вызывающая сторона не предоставляет реализацию запроса подтверждения, то дальнейшая активность тупо пресекается.
...
Рейтинг: 0 / 0
делегаты
    #38456398
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
42.
43.
44.
45.
46.
class Program
    {
        static void Main(string[] args)
        {
            MyFactory.Registration(1, () => Console.WriteLine("fdfsdfsdf"));
            MyFactory.Registration(2, () => Console.WriteLine("rertyrty"));
            MyFactory.Registration(3, () => Console.WriteLine("fdfhgkgggggggggggggggggggggggggggggggggggsdfsdf"));
            while (true)
            {
                int intt;
                if (int.TryParse(Console.ReadLine(), out intt))
                {
                    MyFactory.Resolve(intt);
                }
                else
                {
                    Console.WriteLine("мимо ((");
                }

            }

        }
    }

    public static class MyFactory
    {
        private static readonly Dictionary<int, Action> Baseactions = new Dictionary<int, Action>();

        public static void Registration(int key, Action action)
        {
            Baseactions.Add(key, action);
        }

        public static void Resolve(int key)
        {
            Action action;
            if (Baseactions.TryGetValue(key, out action))
            {
                action();
            }
            else
            {
                Console.WriteLine("Не заряжен ((");
            }
        }
    }


...
Рейтинг: 0 / 0
делегаты
    #38456407
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи, дак Action жеж делегат :)
...
Рейтинг: 0 / 0
делегаты
    #38456456
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
ну а че, добавили указатель, или по месту, и вперед делегаты депутаты
...
Рейтинг: 0 / 0
делегаты
    #38456482
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAОн делегирует это
Это логика, которая легко покрывается с помощью DI. Я не понимаю, нахрена тебе делегаты? :)
...
Рейтинг: 0 / 0
делегаты
    #38456507
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAОн делегирует это
Это логика, которая легко покрывается с помощью DI. Я не понимаю, нахрена тебе делегаты? :)Если легко, то покажи мне код. Ну или опиши словами что-ли, что и куда ты собрался инжектить.

P.S.: а логика реализована 6 лет назад, и прекрасно работает. Я просто вспонил о ней, прочитав вопрос ТС.
...
Рейтинг: 0 / 0
делегаты
    #38456518
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

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

я так и не понял, ты делегат где определяешь? и почему нельзя обойтись обычным методом класса? зачем мудрить?Класс следит за активностью сессии пользователя.
В какой-то момент он наблюдает ситуацию, что между текущим и предыдущим действием прошло больше положенного времени и блокирует дальнейшие действия, пока пользователь не подтвердит, что это именно он.
Причём нам не интересно как пользователь будет подтверждать то, что это именно он. Будет ему показан диалог, или его пошлют на страницу логина. Это поведение делегируется!

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

Но что значит обойтись обычным методом класса?
...
Рейтинг: 0 / 0
делегаты
    #38456805
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

ок. но в данном случае не интересно чем занимается класс. важно кто и когда определяет делегат у инстанса твоего класса?

skyANAЭто поведение делегируется!

вот кем, чем и когда делегируется?
...
Рейтинг: 0 / 0
делегаты
    #38456810
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANA,

ок. но в данном случае не интересно чем занимается класс. важно кто и когда определяет делегат у инстанса твоего класса?

skyANAЭто поведение делегируется!

вот кем, чем и когда делегируется?А вот это уже зависит от конкретного клиента и спокойно может разруливаться на уровне IoC контроллера.
...
Рейтинг: 0 / 0
делегаты
    #38456834
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

так об этом и речь. кстати, почему не event-событие? а делегат?
...
Рейтинг: 0 / 0
делегаты
    #38456876
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttтак об этом и речь.Разверни мысль.
hVosttкстати, почему не event-событие? а делегат?1. Обработчики событий — это нe что иное, как методы, вызываемые с помощью делегатов. Это кстати по твоей же ссылке и написано;
2. В конкретном клиенте один способ подтвердить пароль: один диалог подтверждения пароля, одна страничка, - и события тут на фиг не нужны. Плюс мы исключаем возможность того, что на событие подпишутся несколько раз и пользователя попросят подтвердить себя подряд несколько раз, да ещё вдруг разными способами.
...
Рейтинг: 0 / 0
делегаты
    #38456909
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAРазверни мысль.

да хотя бы даже так:
Код: c#
1.
2.
3.
IUserConfirmator {
   void ConfirmUserPassword();
}


а делегат — это костыль. оно вообще изначально для событий было изобретено. поведение реализуется либо с помощью ООП, либо на уровне интерфейсов.

использовать делегаты для решения таких задач — грубо, не профессионально и прошлый век вообще.

с делегатом в числе свойств/полей класса получается лапша-доширак в коде. все перемешалось. и мухи, и котлеты.
после адекватного ревью, такой кусок кода должен был бы помечен, как "WTF, убрать ево нафих!"
...
Рейтинг: 0 / 0
делегаты
    #38456926
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAРазверни мысль.

да хотя бы даже так:
Код: c#
1.
2.
3.
IUserConfirmator {
   void ConfirmUserPassword();
}


а делегат — это костыль. оно вообще изначально для событий было изобретено. поведение реализуется либо с помощью ООП, либо на уровне интерфейсов.

использовать делегаты для решения таких задач — грубо, не профессионально и прошлый век вообще.

с делегатом в числе свойств/полей класса получается лапша-доширак в коде. все перемешалось. и мухи, и котлеты.
после адекватного ревью, такой кусок кода должен был бы помечен, как "WTF, убрать ево нафих!" А конструктивные аргументы будут?
...
Рейтинг: 0 / 0
делегаты
    #38456934
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, куда уж конструктивнее, всё четко по делу :) Архитектура на делегатах просто убийственна. Посмотри фильм Бомж с дробовиком. Тот случай, зуб даю.
...
Рейтинг: 0 / 0
делегаты
    #38456936
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANA, куда уж конструктивнее, всё четко по делу :) Архитектура на делегатах просто убийственна. Посмотри фильм Бомж с дробовиком. Тот случай, зуб даю.Минусы какие? Какие проблемы могут возникнуть при таком подходе?
...
Рейтинг: 0 / 0
делегаты
    #38457048
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМСУskyANA, куда уж конструктивнее, всё четко по делу :) Архитектура на делегатах просто убийственна. Посмотри фильм Бомж с дробовиком. Тот случай, зуб даю.Минусы какие? Какие проблемы могут возникнуть при таком подходе?
Никакой инверсии, прибивание реализаций гвоздями к забору. Делегатный хаос.
...
Рейтинг: 0 / 0
делегаты
    #38457052
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAпропущено...
Минусы какие? Какие проблемы могут возникнуть при таком подходе?
Никакой инверсии, прибивание реализаций гвоздями к забору. Делегатный хаос.Что такое "прибивание реализаций гвоздями к забору"? А про делегатный хаос можно поподробнее, а то я с таким ещё не сталкивался?
...
Рейтинг: 0 / 0
делегаты
    #38457101
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

проблема №1.
удерживание контекста.

вам надо где-то сделать

Код: c#
1.
client.DelegateHandlerProperty = someClassInstance.MainDelegatenRealizutn();



если на объект someClassInstance потеряется ссылка, то будет Жопа

получив же экземпляр интерфейса мы точно знаем, что объект по ссылке будет жить до последнего вздоха хранителя ссылки, если это не WeakReference конечно

проблема №2.
размазывание логики.

может быть ты не знал, что по логике в свойствах и полях класса хранятся объекты, а не методы. не надо путать C# с JavaScript (где такой подход не только уместен, он жизненно необходим). существует небольшой ряд исключений из правил, например спецификации, где однако задача достаточно чётко обозначена и это обосновано. в основном делегаты — события и функциональщина в чистом виде. т.е. жизнь делегата должна быть коротка, очень коротка.., либо жестко кем-то управляема (event).

проблема №3.
гвозди.

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

проблема №4.
избыточность.

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

--------------

всё это не значит, что делегаты нельзя использовать неправильно. очевидно, это будет просто плохой код. но далеко не всех это беспокоит
...
Рейтинг: 0 / 0
делегаты
    #38457104
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибочка...

Код: c#
1.
client.DelegateHandlerProperty = someClassInstance.MainDelegatenRealizutn;
...
Рейтинг: 0 / 0
делегаты
    #38457185
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttвсё это не значит, что делегаты нельзя использовать неправильно. очевидно, это будет просто плохой код. но далеко не всех это беспокоит Меня это действительно не беспокоит. Код 2006 года и с ним нет никаких проблем. Я о нём после пятой кружки Guinness вспомнил

По поводу п.3: не понял, зачем ты выдумал какой-то период проверки и прочее в контексте задачи? По какому принципу происходит проверка никак не связана с делегатом.

По поводу п.4: если null, то очевидно, что мы не прошли проверку. Ровно также, если исключение не обработано, или экземпляр IUserClassifier не определён.

С п.1 соглашусь, хотя сложно представить себе эту ситуацию.

По поводу п.2: честно не понял, о каком размазывании логики ты говоришь. Зато вспомнил BlToolkit, у них там есть место, где они используют делегаты в качестве статических свойств класса.
...
Рейтинг: 0 / 0
делегаты
    #38457190
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAвспомнил BlToolkit, у них там есть место, где они используют делегаты в качестве статических свойств класса.И не только статических...
...
Рейтинг: 0 / 0
делегаты
    #38457197
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

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

Как бы так сэмулировать п.1 (если на объект someClassInstance потеряется ссылка), а?
...
Рейтинг: 0 / 0
25 сообщений из 152, страница 2 из 7
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / делегаты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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