Переключение на Главную Страницу Страницы: 1 ... 3 4 [5]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Подписка на события vs Перехватчик в каждом классе (число прочтений - 24736 )
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #60 - 18. Августа 2008 :: 05:57
Печать  
Arta писал(а) 17. Августа 2008 :: 16:40:
Для чего тогда в этой схеме класс-родитель?

В "этой схеме" - имеется ввиду подписка?
Если подписка, отвечу: класс-родитель - это основной класс, который делает перехват на открываемую форму. Т.е. кто-то должен ловить события формы. Он один единственный перехватчик формы. И он раздает возникающие события всем подписавшимся и, соответственно, наследнику (но тут уже правила ООП, а не подписки).
Arta, извини, но я, скорее всего, не пойму в чем твой вопрос  Нерешительный
Наверное у меня плохо с русским или с преподавательскими способностями Улыбка
Т.е. тебе не понятно, что я хотел описать в предыдущем посте: "И если ты придумал новое поведение ..."?
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #61 - 18. Августа 2008 :: 06:44
Печать  
Arta писал(а) 17. Августа 2008 :: 20:21:
varelchik писал(а) 17. Августа 2008 :: 17:48:
Когда же все таки Перехватчик начнет ловить не только события формы?
А и все остальные события?
Типа Записать(), Удалить() и т.п.

А Записать и Удалить уже стали событиями?  Озадачен

я имел ввиду Док.Записать() Спр.Записать()
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #62 - 18. Августа 2008 :: 07:05
Печать  
varelchik писал(а) 18. Августа 2008 :: 06:44:
я имел ввиду Док.Записать() Спр.Записать()

Создавай класс-наследник от Документ и Справочник и оттуда генери событие на нужные тебе методы

Нет ничего лучше 1С++ с ООП Улыбка
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #63 - 18. Августа 2008 :: 08:16
Печать  
AndreyM писал(а) 18. Августа 2008 :: 07:05:
Создавай класс-наследник от Документ и Справочник и оттуда генери событие на нужные тебе методы
Нет ничего лучше 1С++ с ООП Улыбка

Он имеет ввиду про события которые должны возникнуть при попытке записи документа. Например кнопка Записать. Так что классы тут не помогут. Только Артур Улыбка
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #64 - 18. Августа 2008 :: 08:22
Печать  
Не, я конечно согласен, что Артур может во всём помочь Улыбка Так на него можно просто свалить всё, а самому переводы получать  Смех
Но вроде он написал, что хочет "Док.Записать()" - тогда ООП

Или у меня опять с русским плохо :)
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #65 - 18. Августа 2008 :: 08:31
Печать  
AndreyM писал(а) 18. Августа 2008 :: 05:57:
В "этой схеме" - имеется ввиду подписка?
Если подписка, отвечу: класс-родитель - это основной класс, который делает перехват на открываемую форму. Т.е. кто-то должен ловить события формы. Он один единственный перехватчик формы. И он раздает возникающие события всем подписавшимся и, соответственно, наследнику (но тут уже правила ООП, а не подписки).
Arta, извини, но я, скорее всего, не пойму в чем твой вопрос  Нерешительный
Наверное у меня плохо с русским или с преподавательскими способностями Улыбка
Т.е. тебе не понятно, что я хотел описать в предыдущем посте: "И если ты придумал новое поведение ..."?


Я не имею ввиду подписку. Я говорю про обычное наследование. При этому меня в основном Классе-Родителе-Перехватчике у меня прописаны основные алгоритмы работы с формами. (Например, в ПриНачалеВыбораЗначения определенных видов атрибутов у меня вместо штатных окон идет выбор через Сервис.ВыбратьЗначение).
Но если в документе РасходнаяНакладная мне понадобилось по особенному отслеживать ПриНажатииКлавиатуры, то я создаю наследника Класса-Родителя-Перехватчика и в нем прописываю это событие со своими особенностями. Но при этом в конце вызываю метод родителя.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #66 - 18. Августа 2008 :: 08:33
Печать  
AndreyM писал(а) 18. Августа 2008 :: 08:22:
Но вроде он написал, что хочет "Док.Записать()" - тогда ООП

Думаю, что если отлавливать Док.Записать(), то совсем хана производительности будет.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #67 - 18. Августа 2008 :: 08:53
Печать  
Arta писал(а) 18. Августа 2008 :: 08:33:
AndreyM писал(а) 18. Августа 2008 :: 08:22:
Но вроде он написал, что хочет "Док.Записать()" - тогда ООП

Думаю, что если отлавливать Док.Записать(), то совсем хана производительности будет.

Да, наверняка.
Но все это нужно проверять!

ЗЫ но это дело далекого будущего Улыбка
  

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



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #68 - 18. Августа 2008 :: 09:04
Печать  
Arta писал(а) 18. Августа 2008 :: 08:31:
AndreyM писал(а) 18. Августа 2008 :: 05:57:
В "этой схеме" - имеется ввиду подписка?
Если подписка, отвечу: класс-родитель - это основной класс, который делает перехват на открываемую форму. Т.е. кто-то должен ловить события формы. Он один единственный перехватчик формы. И он раздает возникающие события всем подписавшимся и, соответственно, наследнику (но тут уже правила ООП, а не подписки).
Arta, извини, но я, скорее всего, не пойму в чем твой вопрос  Нерешительный
Наверное у меня плохо с русским или с преподавательскими способностями Улыбка
Т.е. тебе не понятно, что я хотел описать в предыдущем посте: "И если ты придумал новое поведение ..."?


Я не имею ввиду подписку. Я говорю про обычное наследование. При этому меня в основном Классе-Родителе-Перехватчике у меня прописаны основные алгоритмы работы с формами. (Например, в ПриНачалеВыбораЗначения определенных видов атрибутов у меня вместо штатных окон идет выбор через Сервис.ВыбратьЗначение).
Но если в документе РасходнаяНакладная мне понадобилось по особенному отслеживать ПриНажатииКлавиатуры, то я создаю наследника Класса-Родителя-Перехватчика и в нем прописываю это событие со своими особенностями. Но при этом в конце вызываю метод родителя.

Абсолютно согласен! По-другому и не сделаешь.
Я не отговариваю тебя от базовый-наследник - если всё уже построено так (а раньше сам так делал Улыбка), то "нечего огород городить"
А теперь представь, что тебе по особенному нужно отслеживать ПриНажатииКлавиатуры не только в РасходнаяНакладная, но и Счет, ПриходнаяНакладная и т.д. все документы - т.е. тебе прийдется переписать все классы-наследники: Документ.РасходнаяНакладная, Документ.Счет и т.д. (или создать новые наследники). Объем работы представляешь?
И наоборот: у тебя есть класс, который обрабатывает события формы и который у тебя включен во все твои классы Документ... То изменяя только в этом классе (в одном!) работу ПриНажатииКлавиатуры (или добавляя это событие как новое, т.е. раньше ты не обрабатывал его) - у тебя изменения попадут во все твои классы Документ...

Просто о чем я хочу сказать: сейчас я делаю новую задачу и наткнулся на момент, что добавляя новое поведение в классе-наследнике, приходится много делать ручками (как ты сказал: "я создаю наследника Класса-Родителя-Перехватчика и в нем прописываю это событие со своими особенностями"). Разрулив данную ситуацию, пришел к выводу, что делая подписку и "подписав" некий класс-обработчик (в начале даже пустой, т.е. который ничего не делает) - мне не приходится добавлять/создавать новые наследники на базовый класс-перехватчик, а просто добавлять события или изменять их поведение в этом классе-обработчике (который был поначалу пустым). Все изменения сразу попадают во все обработчики формы.

Так понятно написал?  Улыбка
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #69 - 18. Августа 2008 :: 09:06
Печать  
Arta писал(а) 18. Августа 2008 :: 08:33:
AndreyM писал(а) 18. Августа 2008 :: 08:22:
Но вроде он написал, что хочет "Док.Записать()" - тогда ООП

Думаю, что если отлавливать Док.Записать(), то совсем хана производительности будет.

Согласен, но это уже его головная боль.
Знаешь же: хочется - хуже чем болит  Улыбка
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #70 - 18. Августа 2008 :: 09:37
Печать  
AndreyM писал(а) 18. Августа 2008 :: 09:04:
А теперь представь, что тебе по особенному нужно отслеживать ПриНажатииКлавиатуры не только в РасходнаяНакладная, но и Счет, ПриходнаяНакладная и т.д. все документы - т.е. тебе прийдется переписать все классы-наследники: Документ.РасходнаяНакладная, Документ.Счет и т.д. (или создать новые наследники). Объем работы представляешь?

Представляю. Сделать еще один класс, который будет заниматься только документами Улыбка

Кстати, я свои классы называю также как и ПолныйТипОбъекта. Это очень удобно. В перехватчике ГМ пишу:
Код
Выбрать все
РасширениеФормы = СоздатьОбъект("РасширениеФормы");
РасширениеФормы.УстановитьФорму(Конт.Форма);
ПолныйТипОбъекта = РасширениеФормы.ПолныйТипОбъекта();
Мета = СоздатьОбъект("MetaInfoClasses");
Если Мета.ПолучитьВсеИменаКлассов().Принадлежит(ПолныйТипОбъекта) = 1 Тогда
  ПерехватчикСобытий = СоздатьОбъект(ПолныйТипОбъекта); // Клас-наследник перехватчика всех форм.
Иначе
  ПерехватчикСобытий = СоздатьОбъект("ПерехватчикиСобытийФормы"); // Перехватчик всех форм.
КонецЕсли;
ПерехватчикСобытий.Инициализация(Конт); 



Т.е. у меня есть класс ПерехватчикСобытийФормы - он базовый.
Есть класс, например, Справочник.Номенклатура.Форма. Он наследник ПерехватчикаСобытийФормы. Если мне понадобится сделать общие события для всех справочников, то я вставлю между ними (в иерархию) один класс, который и будет обрабатывать общие для всех справочников события.

При этом мне не придется в десятках мест прописывать подписку на события.


P.S. Или я не понял тебя?  Подмигивание
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #71 - 18. Августа 2008 :: 09:50
Печать  
Arta писал(а) 18. Августа 2008 :: 09:37:
Кстати, я свои классы называю также как и ПолныйТипОбъекта. Это очень удобно.

Согласен, делаю так же. Улыбка

Arta писал(а) 18. Августа 2008 :: 09:37:
Если мне понадобится сделать общие события для всех справочников, то я вставлю между ними (в иерархию) один класс, который и будет обрабатывать общие для всех справочников события.

При этом мне не придется в десятках мест прописывать подписку на события.

P.S. Или я не понял тебя?  Подмигивание

Правильно понял, кстати отличный вариант.  Улыбка

На подписку я тебя уже не склоняю, если всё сделано через базовый-наследник. Сейчас, действительно, прописывать подписку нет смысла - гемор полный.

См.ниже
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #72 - 18. Августа 2008 :: 10:13
Печать  
to Arta
В продолжение разговора...
в твоем коде:
Код
Выбрать все
  ПерехватчикСобытий = СоздатьОбъект("ПерехватчикиСобытийФормы"); // Перехватчик всех форм.
 


перехватил любую другую форму, например Отчет.
А в отчете захотел использовать классы (названия взяты с фонаря Улыбка), например "МножественныйФильтр" (далее МФ) и "ОграниченияВыбораКлиентов" (далее ОВК) , но не во всех отчетах, а в парочке...

Отчет, например, полностью написан как самостоятельная единица, просто нужно добавить пару вышеизложенных классов.
"МножественныйФильтр" использует события формы, для того чтобы подменить выбор/вывод на другие "визуальные эффекты", например Сервис или АктивИкс.
А "ОграниченияВыбораКлиентов" - только ПриНачалеВыбораЗначения.

Твои действия?  Подмигивание

ЗЫ Отвечу сразу: с подпиской, кроме создания и инициализации класса, добавишь одну строку для каждого класса: ПодписатьсяНаСобытияФормы(Контекст,КОП) - и всё.
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом кл
Ответ #73 - 18. Августа 2008 :: 18:10
Печать  
AndreyM писал(а) 18. Августа 2008 :: 10:13:
Твои действия?  Подмигивание

Мои действия - реализовать это в модуле самого отчета Улыбка
Ради одного-двух отчетов городить огород...
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Подписка на события vs Перехватчик в каждом классе
Ответ #74 - 01. Декабря 2008 :: 14:40
Печать  
Подскажите, мне не использовавшему ещё перехватчик в промышленных целях(тесты пробовал делать, но обработчик перехваченных событий  и перехватчик были в одном лице), какая из схем приведённых в ветке всё таки лучше, т.к. собираюсь плотно заняться перехватчиком.

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

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 
ОтправитьПечать