Первое сообщение, пожалуйста, будьте осторожны:)
При создании пользовательских элементов управления в ASP.NET MVC, каков наилучший способ структурирования кода, чтобы контроллеры, вызывающие представления, которые используют пользовательские элементы управления, не все так много знают об элементах управления? Я хотел бы знать хороший способ поддерживать DRY при использовании пользовательских элементов управления в ASP.NET MVC.
Обратите внимание, что этот вопрос относится только к пользовательским элементам управления, которые требуют специальной обработки и логики при обратной передаче. У меня нет проблем с созданием красивого DRY-кода для пользовательских элементов управления, которые либо видны только (с использованием RenderPartial), либо требуют предварительной обработки для создания соответствующей ViewModel (с использованием RenderAction).
Кроме того, этот вопрос относится только к достижению многократного использования элементов управления в приложении. Я не беспокоюсь о повторном использовании приложений в данный момент.
Чтобы дать конкретный пример, скажем, я хотел бы создать пользовательский элемент "Быстрое добавление", который содержит три поля ввода: имя, фамилию и название компании и кнопку отправки. Когда используется функция QuickAdd, следующие шаги должны выполняться независимо от того, на какой странице находится элемент управления:
- Подтвердите, что поля не были пустыми, если они есть, показывают индикатор.
- Выполните поиск в репозитории, чтобы узнать, существует ли компания, если нет; создайте его.
- Создайте новый контакт, связанный с существующей компанией или созданной компанией.
- Повторно отрисуйте существующую страницу. Если ошибок проверки не было, пользователь снова увидит одну и ту же страницу, иначе на той же странице с ошибками проверки.
Моя основная проблема с достижением DRY связана со всеми контроллерами, которые вызывают представления, которые содержат частичный вид, в конечном итоге должны иметь метод действия для обработки представления формы из Quick Add. Даже если я вырву логику для обработки информации в отдельный контроллер и вызову этот метод из каждого из других контроллеров, это кажется бременем, что каждый контроллер, который вызывает представления, которые имеют повторно используемые элементы управления, должен иметь эти знания.
Другой вариант, на который я смотрел, состоял в том, чтобы всегда использовать элемент многократного использования для конкретного метода/контроллера действия, но тогда нет возможности для этого контроллера знать, как правильно заново заполнить модель для конкретного контроллера, который вызывал который содержал средство многократного использования (на шаге 4).
Я знаю, что есть разговоры о субконтроллерах в MVC 2 (из этого вопроса ASP.NET MVC - Содержимые элементы управления пользователя), но так как его еще нет, Каков наилучший способ структурирования кода для достижения максимального повторного использования при сохранении DRY?
Есть ли альтернатива наличию всех контроллеров, которые вызывают представления, которые используют элемент многократного использования (с характеристиками описанного выше), должны иметь метод действия для обработки информации из элемента управления?