Решил вот посоветоваться.
Сейчас принята стандартная OLE-Automation модель привязки к событиям, порождаемым объектом Designer, на базе интерфейсов IConnectionPoint
Однако есть у нее недостатки.
Для скриптописателей неудобна тем, что нельзя контролировать когда реагировать на событие, а когда нет.
Если есть обработчик события, то он вызывается всегда при возникновении события.
Все помнят о неизбежных глобальных флагах в скриптах при обработке например OnMessageBox, OnDoModal, OnFileDialog и тд и тп.
Также обработчик события может быть только один на весь скрипт. И если например создается несколько объектов, каждый из которых хочет реагировать на событие, приходится самому вести список этих объектов и руками в событии дергать каждый этот объект.
Для Designer'а неудобно тем, что нельзя указать конкретные события, к которым привязывается получатель - если он привязывается, то сразу ко всем событиям.
То есть если в скрипте есть обработчик хотя-бы одного события, то скрипт дергается при любом событии, независимо от того, есть в нем обработчик этого события или нет.
Поэтому я хочу перейти на систему, похожую на модель "сигнал-слот" из QT.
У объекта Designer сделать два метода - connect и disconnect.
В методе connect указывается имя события, к которому хотим привязаться, объект-получатель события, имя обработчика события в объекте.
Например:
Код:
connect("onDoModal", SelfScript.self, "onDesignerDoModal")
...
disconnect("onDoModal", SelfScript.self, "onDesignerDoModal")
таким образом, выгода: для скриптописателей - гибкость в реагировании на события, для designer'а - вызываться будут действительно только те обработчики, которые в этом нуждаются.
А соответственно, это опять же выгода для общей производительности системы.
Есть у кого-нибудь мысли на эту тему?