Бурлящие события. - PullRequest
       35

Бурлящие события.

25 голосов
/ 20 октября 2008

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

Ответы [ 6 ]

30 голосов
/ 20 октября 2008

Если все, что вы делаете, это запускаете обработчик событий из другого обработчика событий, вы можете отключить посредника и подключить обработчики событий непосредственно в блоках добавления / удаления для события.

Например, если у вас есть UserControl с событием «SaveButtonClick», и все, что вы хотите сделать, когда вызываете обработчик события при нажатии «SaveButton» в вашем UserControl, вы можете сделать это:

public event EventHandler SaveButtonClick
{
    add { this.SaveButton.Click += value; }
    remove { this.SaveButton.Click -= value; }
}

Теперь вам не нужен какой-либо код для запуска события SaveButtonClick - он будет автоматически запускаться при возникновении события SaveButton.Click (т.е. когда кто-то нажимает эту кнопку).

3 голосов
/ 25 ноября 2008

Питер Риллинг опубликовал способ имитации событийного вещания / трансляции в winforms Это просто и эффективно.

http://www.codeproject.com/KB/cs/event_broadcast.aspx

3 голосов
/ 22 октября 2008

Прочитайте блог Джереми Миллера "The Shade Tree Developer", особенно его Write Your Own CAB series - материал о шаблонах команд, о котором он говорит, вероятно, вам нужен .

1 голос
/ 20 октября 2008

Если я не увижу немного больше дизайна ... будет сложно дать хороший ответ.

WPF отправляет всплывающие события (автоматически) в дерево компонентов / элементов управления пользовательского интерфейса ... теперь оно встроено в каркас. Так что я думаю, что это рекомендуемый способ:)

Проблема с обходом среднего уровня Layer2 заключается в том, что Layer1 и Layer3 теперь знают друг друга ... связаны. Так что это компромисс ... если вы в порядке со связью ... устранить посредника / изобрести специализированный компонент с этой ответственностью. Однако, если вы ожидаете, что уровень 3 будет горячей заменой (слабая связь), я бы сказал, продолжать пузыриться.

0 голосов
/ 21 октября 2008

Взгляните на Обновление элементов управления .NET . Эти элементы управления обнаруживают части вашей модели данных, от которых они зависят, даже на всех уровнях бизнес-логики. Вам не нужно писать любой код, чтобы уведомить их.

0 голосов
/ 20 октября 2008

Вы можете иметь центральный канал, который поддерживает только события. Этот канал должен быть независимым, чтобы слой только публиковал или подписывался на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...