2008-10-20 3 views
23

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

ответ

29

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

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

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

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

+0

Это звучит интересно. Хотелось бы увидеть реализацию. – 2008-10-20 02:55:56

0

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

+1

Это звучит интересно, но объяснение очень расплывчато. Можете привести несколько примеров? – spoulson 2008-10-20 01:43:36

1

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

WPF запускает события пузырьков (автоматически), компонент Component/Control UI ... это теперь встроено в структуру. Поэтому я думаю, что это рекомендуемый способ:

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

0

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

3

Прочитайте блог Джереми Миллера «Разработчик дерева тени», особенно его Write Your Own CAB series - материал команды, в котором он говорит о том, что, вероятно, вам нужно.

Смежные вопросы