Почему всплывают события и почему бы не подписаться на событие click напрямую? - PullRequest
5 голосов
/ 02 июля 2010

Я просматривал статью о всплывающих событиях в asp.net и узнал, что, хотя можно подписаться на событие click кнопки пользовательского элемента управления со страницы, содержащей его, «это может привести к поломке некоторых объектов. ориентированные правила инкапсуляции ». Лучшая идея - опубликовать событие в пользовательском элементе управления, чтобы позволить всем заинтересованным сторонам обработать событие.

Мой вопрос заключается в том, как именно прямая подписка на событие нажатия кнопки на содержащей странице нарушит объектно-ориентированные правила инкапсуляции?

Извинения, если это глупый вопрос. : |

Спасибо!

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

Кнопка должна быть инкапсулирована в UserControl.

Если страница привязана непосредственно к событиям на кнопке, то страница теперь зависит от внутренних обработок UserControl.

Страница должна использовать UserControl, а не кнопку UserControl. Если автор UserControl позже захочет удалить кнопку и использовать какой-то необычный новый метод запуска события «Отправить», ваша страница может быть повреждена, поскольку кнопка может больше не существовать.

В этом отношении, если владелец UserControl решит в v1.1 переименовать кнопку из btnSubmit в SubmissionButton, это также может привести к поломке вашей страницы.

Лучше использовать UserControl и позволить ему заниматься своими внутренними действиями.

3 голосов
/ 02 июля 2010

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

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

...