Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Делегат - Новая фича нужна или нет? (число прочтений - 5047 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Делегат - Новая фича нужна или нет?
04. Апреля 2007 :: 05:02
Печать  
Народ, мне лично не нравится, что в Делегате и МенеджереСобытий соответственно нет возможности получить экземпляры классов-обработчиков и наименование методов-обработчиков.

Например, у меня давно используется своя модель обработки событий в конфигурации - http://www.1cpp.ru/forum/YaBB.pl?num=1169222935/98#98

Основное неудобство при работе с событиями - в онлайн-режиме (в Предприятии) не видно, какие обработчики подписаны на данное событие Печаль

В результате иногда при разборе полетов непонятен порядок вызова обработчиков и какой обработчик вызывает баг Печаль
Приходится вручную искать в Конфигураторе Печаль

Я сам могу добавить данный функционал в 1С++ .

Я понимаю, что можно создать класс-наследник от Делегата и добавить в него нужный функционал, но все-таки хочется сделать данный функционал базовым для всех.

ЗЫ Хотя можете уговорить на наследника, слишком сильно упираться не буду Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #1 - 04. Апреля 2007 :: 05:06
Печать  
Т.е. нужен метод типа ПолучитьСписокОбработчиков(), возвращающий список, в котором представление - имя метода-обработчика, а значение - сам объект-обработчик.

В этом случае можно будет для любого Делегата/МенеджераСобытий получать подписчиков, а также на лету добавлять/удалять их !!
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Делегат - Новая фича нужна или нет?
Ответ #2 - 04. Апреля 2007 :: 08:15
Печать  
Приведи, пожалуйста, пример кода, как ты это хочешь использовать. А то не очень понятно, о чем ты говоришь.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #3 - 05. Апреля 2007 :: 03:34
Печать  
1) Решил, что удобнее вместо списка иметь таблицу значений

2) Предлагаю два метода для Делегата и МенеджераСобытий -
ПолучитьТаблицуОбработчиков()
ПолучитьТаблицуОбработчиковПоКлючу(Ключ)


Пример кода-теста для нашей тестовой конфы
Код
Выбрать все
Процедура тестПолучитьТаблицуОбработчиков() Экспорт
	Сам =Сам();

	_о =_Объект();
	_обр =_Обработчик();

	_о.ОпределитьТип(1, 0);
	_о.Добавить(_обр, "процИнкремент");
	_о.Добавить(_обр, "процКвадрат");

	Таб = _о.ПолучитьТаблицуОбработчиков();
	// Таб // : ТаблицаЗначений

	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб), "ТаблицаЗначений");
	Сам.ПроверитьРавенство(Таб.КоличествоСтрок(), 2);

	Таб.ПолучитьСтрокуПоНомеру(1);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб.Объект), ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.Объект, _обр);
	Сам.ПроверитьРавенство(Таб.НаименованиеКласса, ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.НаименованиеМетода, "процИнкремент");

	Таб.ПолучитьСтрокуПоНомеру(2);
	Сам.ПроверитьРавенство(ТипЗначенияСтр(Таб.Объект), ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.Объект, _обр);
	Сам.ПроверитьРавенство(Таб.НаименованиеКласса, ТипЗначенияСтр(_обр));
	Сам.ПроверитьРавенство(Таб.НаименованиеМетода, "процКвадрат");
КонецПроцедуры
 



Реализация будет сделана в Делегате, в Менеджере просто вызов соответствующих методов Делегата

3) Я для себя уже все решил, мне эти методы очень нужны.
С их помощью я смогу сделать обработку, которая сможет добавлять/удалять/менять порядок обработчиков событий на лету/динамически, что удобно, например, для отладки!
Буду реализовывать.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Делегат - Новая фича нужна или нет?
Ответ #4 - 05. Апреля 2007 :: 03:39
Печать  
А все проблемы с делегатом - от неправильного использования Улыбка

зы: Превратили примитивный класс в монстра - и боретесь с ним! Улыбка
зы2: Вообще, логично было бы видеть свойства у делегата ИмяМетода и Объект. Но и они не должны быть очень востребованы.
  
Наверх
ICQ  
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Делегат - Новая фича нужна или нет?
Ответ #5 - 05. Апреля 2007 :: 03:42
Печать  
artbear
Цитата:
Предлагаю два метода для Делегата и МенеджераСобытий - 
ПолучитьТаблицуОбработчиков()
ПолучитьТаблицуОбработчиковПоКлючу(Ключ)


УЖОС! Других слов нет! Очень довольный
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #6 - 05. Апреля 2007 :: 03:43
Печать  
Цитата:
artbear
Цитата:
Предлагаю два метода для Делегата и МенеджераСобытий -  
ПолучитьТаблицуОбработчиков()
ПолучитьТаблицуОбработчиковПоКлючу(Ключ)


УЖОС! Других слов нет! Очень довольный

Не понял Печаль
В чем проблема?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #7 - 05. Апреля 2007 :: 03:45
Печать  
Цитата:
А все проблемы с делегатом - от неправильного использования Улыбка

зы: Превратили примитивный класс в монстра - и боретесь с ним! Улыбка
зы2: Вообще, логично было бы видеть свойства у делегата ИмяМетода и Объект. Но и они не должны быть очень востребованы.

1) Подскажи, как правильно его использовать Улыбка
2) ИмяМетода и Объект - это как?
ИмяМетода(НомерОбработчика) ?
Объект(НомерОбработчика) ?
или я опять не понял? Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Делегат - Новая фича нужна или нет?
Ответ #8 - 05. Апреля 2007 :: 04:12
Печать  
artbear писал(а) 05. Апреля 2007 :: 03:45:
...
2) ИмяМетода и Объект - это как?
ИмяМетода(НомерОбработчика) ?
Объект(НомерОбработчика) ?
или я опять не понял? Улыбка


Что значит "Обработчик" в контексте делегата?
Делегат агрегирует экземпляр некоего класса и имя его [класса] метода. И все.
зы: Ну это, скажем, "как должно быть".
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #9 - 05. Апреля 2007 :: 04:27
Печать  
Я тебе в личку уже написал, что у нас реализовано по-другому Улыбка
т.е. у нас фактически менеджер делегатов Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #10 - 05. Апреля 2007 :: 07:14
Печать  
Залил в 2.5 данные изменения для классов Делегат и МенеджерСобытий. Тесты также залил.
Будет в ночной сборке.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Делегат - Новая фича нужна или нет?
Ответ #11 - 05. Апреля 2007 :: 07:27
Печать  
Цитата:
УЖОС! Других слов нет! Очень довольный

Гыы.

Ключи, передача статусов, рефлексия...
Водка с пивом - злой йад.

P.S. сейчас бы объединение функционала контейнера и делегата делать бы не стал.
Эффект в скорости имхо не покрывает издержек.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #12 - 06. Апреля 2007 :: 12:21
Печать  
Также поправил доку.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Делегат - Новая фича нужна или нет?
Ответ #13 - 06. Апреля 2007 :: 13:50
Печать  
Э-хе-хе...

Ну я то не код теста просил, а хотел узнать, для чего это тебе надо. Постановку задачи, так сказать.

Похоже, что задача поставлена неправильно...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Делегат - Новая фича нужна или нет?
Ответ #14 - 06. Апреля 2007 :: 13:53
Печать  
artbear писал(а) 05. Апреля 2007 :: 03:34:
1)
С их помощью я смогу сделать обработку, которая сможет добавлять/удалять/менять порядок обработчиков событий на лету/динамически, что удобно, например, для отладки!

Иначе при большом количестве обработчиков иногда происходит путаница и совершенно непонятно, чей косяк.

ЗЫ про тестирование не говорите, все понимаю, но не всегда могу использовать нормальные тесты Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать