Форум: "Потрепаться";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизСобытийная архитектура в Builder/Delphi Найти похожие ветки
← →
Unhandled Exception (2002-08-11 20:23) [0]Товарищи!
Как Вы считаете, почему Borland принял на вооружение такой негибкий
механизм событий. В отличие от прочих событийно-ориентированных технологий,
таких как Java или COM, в Дельфях нельзя "повесить" несколько обработчиков
на одно и тоже событие. Скажу честно, Мне это создало большие проблемы.
Например, Мне нужна была более детальная информация о событиях, происходящих
с DataSet"ом, чем можно получить через DataLink. Казалось бы, пользуйся
событиями BeforeOpen и прочими. Так нет. Если ещё кто-то ими заинтересуется
после Меня, то Меня ни о чём уже не будет никто извещать. Похожая ситуация
будет со слушателем этих событий, который подписался на них раньше Меня.
Собственно теперь вопрос к экспертам по Дельфям. Можно ли доработать
VCL для поддержки множества слушателей на одно и тоже событие? Можно ли
организовать списки слушателей, добавить механизм подписки/отписки от
событий, не нарушая при этом прежний стиль программирования. Не надумана
ли эта проблема? Может всем, кроме Меня, всегда хватало одного слушателя
событий?
← →
drpass (2002-08-11 21:51) [1]Нет, нельзя. Дело в том, что в VCL вообще нет механизма событий как такового. Это лишь хитрая уловка, позволяющая сделать более удобной разработку. "События" на самом деле представляют собой переменные-указатели на процедуры. Создавая обработчик, ты просто пишешь процедуру и присваиваешь этой переменной ее адрес. Затем в коде VCL, там где нужно сгенерировать событие, просто проверяется эта переменная и если она куда-то указывает, по этому адресу будет передано управление. Вот и все. Просто, зато эффективно.
А поскольку события происходят только в рамках одной программы, никаких проблем их "однонаправленность" не должна составлять. Если так нужно добавлять/удалять слушателей, сделай в обработчике несложный "менеджер", который будет вызывать нужные вторичные обработчики.
← →
vuk (2002-08-12 00:21) [2]to Unhandled Exception:
>Как Вы считаете, почему Borland принял на вооружение такой
>негибкий механизм событий.
Все просто. Технолония компонентная архитектура VCL доольно-таки старая и появилась несколько раньше многих современных архитектур, где есть мульткастинг событий. Далее же такая ситуация сохранялась исключительно по причинам необходимости совместимости снизу вверх для имеющихся проектов. Тем не менее был тонкий намек от borland, что в будущих версиях Delphi, возможно, будет реализован мультикастинг событий.
to drpass:
>А поскольку события происходят только в рамках одной программы,
>никаких проблем их "однонаправленность" не должна составлять.
Рамки одной программы ни при чем. Даже в пределах одной формы, не говоря уже о программе, можно получить массу проблем из-за отсутствия мультикастинга.
>сделай в обработчике несложный "менеджер", который будет
>вызывать нужные вторичные обработчики.
К сожалению это невозможно сделать абсолютно прозрачно и надежно.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c