ASP.NET MVP - использование пользовательских элементов управления - PullRequest
9 голосов
/ 04 декабря 2008

Я пишу свое первое приложение с ASP.NET MVP (попытка Supervisory Controller) и модульное тестирование (лучше поздно, чем никогда!), И я столкнулся с небольшой дилеммой. Я написал 3 пользовательских элемента управления, все протестированы и подключены, ведущие на буксире. Теперь я зашел на страницу, которая берет эти три пользовательских элемента управления и столкнулся со следующей проблемой:

Пользовательский элемент управления 1 - это DateSelector, это элемент управления Calendar с несколькими другими кнопками / списками. Ничего особенного захватывающего.

Пользовательский элемент управления 2 - DailyList. Угадай, что это. В любом случае, вы можете выбрать / удалить и т. Д. Если вы выбираете элемент из сетки, он должен заполнить User Control 3.

Пользовательский элемент управления 3 - ItemDetail. Вот DropDownLists, TextBoxes и т. Д. ... некоторые с существующими зависимостями от других (выбор параметра в DropDown влияет на параметры в DropDown 2).

Если я выберу новую дату из своего DateSelector, вызову ли я событие из Presenter DateSelector? Я должен как-то сообщить другим пользовательским элементам управления, что была выбрана новая дата, чтобы они могли заново связать свои данные, но как? Если я использую Presenter страницы для подписки на Presenters представлений пользовательского контроля, не буду ли я открыто нарушать закон Деметры (выставляя Presenters как свойства через их представления)? Разве я не должен использовать ведущий страницы как всезнающий контроллер страницы? Есть ли что-то, что мне не хватает?

Все, что я до сих пор читал, говорит: «MVP великолепен, даже с пользовательскими элементами управления», но об использовании пользовательских элементов управления удобно забывать, когда речь идет о примерах. Мне кажется, что MVC будет более точно соответствовать моей модели мышления, но в настоящее время MVC не подходит. Любая помощь будет отличной здесь. Заранее спасибо.

1 Ответ

4 голосов
/ 04 декабря 2008

Page Presenter должен координировать взаимодействие между элементами управления на странице. Кто бы еще это сделал? Я бы попросил докладчика прослушать событие пользовательского элемента управления DateSelector. С точки зрения докладчика страницы, вероятно, не нужно знать, кто вызвал событие (представление или докладчик), поскольку он рассматривает DateSelector как полностью инкапсулированный элемент управления. Внутренняя работа должна быть скрыта от ведущего страницы.

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

...