Я занимаюсь проектированием / созданием веб-приложения ASP.NET среднего масштаба с использованием WebForms.Основная работа в проекте - создание каждой веб-формы, и я не знаю, как спроектировать (в смысле кода / данных / потока данных) мои элементы управления.
Я приведу несколько примеровс чем я имею дело, чтобы вы могли понять, что я имею в виду:
Распространенной задачей в приложении является ввод и отображение уличных адресов.Поэтому я создал UserControl под названием «AddressFields», который содержит серию элементов HtmlInputText (один для строки 1, другой для города / города, страны, почтового индекса и т. Д.).Мои классы сущностей БД содержат класс с именем «Address», поэтому этот элемент управления имеет методы:
- void ShowAddress (Address addr) - который заполняет элементы HtmlInputText соответствующим текстом).
- void UpdateAddress (Address addr) - обновляет содержимое addr в соответствии с текущим содержимым элементов HtmlInputText
- Address CreateAddress () - создает новый экземпляр Address, затем передает его в UpdateAddress и затем возвращает его
Пока все хорошо.Это работает, потому что элемент управления AddressFields «тупой», все что он делает, это отображает и получает данные для пользователя.ViewState также напрямую управляется полями HtmlInputText, поэтому никакой дополнительной логики не требуется.
Другой объект в моем приложении - это «Клиент», который является классом с атрибутом Address, но этот класс также имеетнесколько более сложных аспектов.Например, у Клиента есть ряд тегов («категорий» в моем приложении), которые можно назначить.В этом случае я разработал подкласс элемента управления ASP.NET CheckboxList.
Я создал еще один UserControl под названием «ClientFields», который содержит все необходимые поля для отображения информации о клиенте (включая элемент управления AddressFields), но онтакже включает в себя мой подкласс CheckboxList под названием «CategoryList».
Проблема здесь заключается в том, что элемент управления CategoryList должен быть предоставлен для отображения данных (но не для обратных передач, поскольку он использует viewstate). В этом случае мой вопрос: кто несет ответственность за подключение к базе данных и получение списка категорий ?
Это элемент управления CategoryList?(Если так, то где в жизненном периоде элемента управления он запрашивает базу данных? Он не может сделать это в Control.Load, потому что это происходит после заполнения ClientFields. Это происходит в самом ClientFields? (Опять же, тогда где в продолжительности жизниэто происходит, потому что у ClientFields есть свой метод ShowClient (Client c), вызываемый в Page.Load. Альтернативой является раскрытие CategoryList из ClientFields, чтобы к нему можно было напрямую обращаться к странице, но это является нарушением хорошего дизайна программного обеспечения.