artbear писал(а) 14. Августа 2008 :: 06:20:Флаг обрыва цепочки выполнения ИМХО использовать не очень удобно, т.к. получается не универсально
Например, в цепочке куча универсальных обработчиков, которые не зависят друг от друга и обязательно должны выполнить некие действия.
Если первый из них тормознет всю цепочку, то остальные не выполнятся и будет косяк.
Поэтому, как правило, я не юзаю подобный флаг, а передаю спец. параметр события типа ФСО, которым и подсказываю, что кто-то где-то предлагает не выполнять стандартные действия.
Думал и об этом - у самого мнение раздвоилось. Сразу скажу:
если бы использовал МенеджерСобытий - ситуация была бы таже. И у тебя в тестовой конфе в функции СобытиеГлобальногоМодуля(ВидСобытия, стрПараметры)
такая же возможна ситуация, но дальше ты ее не обрабатываешь.
Из описания:
Синтаксис:ПослатьСобытие(<Издатель>,<ДопПараметр>)
Назначение:
Метод посылает событие всем зарегистрировавшимся подписчикам на него.
...
Возвращаемое значение:(Число) 1 - цепочка рассылки событий пройдена полностью, 0 -
рассылка была прервана одним из подписчиков.
Для варианта подписки придумал правило, которое будет либо описано в инструкции по пользованию, либо код реализации подписки будет переделан (в принципе, уже записал в план переделки).
Варианты:
1) классы, которые должны
обязательно получить событие, описываются последними, т.е. выполняться будут первыми (по принципу Перехватчика);
2) в процедуре _ПодписатьсяНаСобытияФормы(Класс,Знач ИмяСобытия,ОбязательноПолучатьСобытие=0) при передаче флага ОбязательноПолучатьСобытие=1 будут получать событие даже в случае, если кто-то вернул 0 и могут восстановить или сбросить ФСО - т.е. установить/сбросить событие (т.е. нажмется клавиша или нет);
3) вариант для инструкции: (включает описание первого варианта) + "Все обработчики событий должны быть описаны как процедуры (т.е. возвращают 1 в любом случае и так описано в большинстве классов), либо, как функции, и возвращать 1. Если класс обрабатывает определенный реквизит или событие и он обработал "свой" реквизит или событие, то может вернуть 0, чтобы прервать цепочку событий и остальные классы не будут делать проверку, т.к. определили, что реквизит уже "не их". Либо класс, который обрабатывает какие-либо критические события (например, нельзя нажимать на эту кнопку), то возвращая 0, делает так, как если бы этого события небыло вовсе."
artbear писал(а) 14. Августа 2008 :: 06:20:Например, для событий Событие_ПриОткрытии ФСО = 0 в подписке означает, что форма не будет открыта, и обработчики могут в зависимости от этого выполнять или не выполнять свои действия.
Так оно и работает: ФСО - это флаг выполнения события.
См.нижеartbear писал(а) 14. Августа 2008 :: 06:20:Подписчики обязаны вернуть 1 в Обработать_Событие_ПриОткрытии, а вот ФСО могут менять.
Зачем заводить Обработать_Событие_ПриОткрытии? Если точно так-же они "обязаны вернуть 1 ", т.е. делают Возврат 1, либо описываются как процедуры. Логика поведения не изменилась, но нет переменной. Согласен?
artbear писал(а) 14. Августа 2008 :: 06:20:Или еще надежнее, если форма может быть не открыта - ввести два собственных события:
Обработать_Проверку_Событие_ПриОткрытии - проверяем, будет ли форма открыта.
Это и есть ФСО
artbear писал(а) 14. Августа 2008 :: 06:20:... проверяем, будет ли форма открыта. Здесь цепочка может прерывать, и это правильно/быстро/удобно.
Это и есть Возврат 0
Т.е. ты описал те же действия/поведение, но другими словами. Согласен?
Или я не правильно понял?