С MVC3, должен ли я проектировать мои модели представлений таким образом, чтобы существовал объект, привязанный к представлению (DisplayModel), и тот, который отправлен обратно контроллеру (EditModel)?
Чтобы уточнить, я не спрашиваю о моделях моделей моделей и моделей - я знаю, что это нехорошо связывать мои представления/контроллеры с моделями данных/доменов.
Я не прошу об обмене одной моделью на два отдельных представления, одно представление, которое используется для отображения данных, и другое представление, которое используется для редактирования данных.
Скорее, я спрашиваю об одном представлении, которое используется для редактирования данных, и модели, связанной с представлением и моделью, связанной с действием контроллера.
Другими словами, если это мое мнение:
@model MyApp.Models.CustomerModel
Должно ли мое действие контроллера выглядеть следующим образом:
public ActionResult Index(CustomerModel model)
Или:
public ActionResult Index(CustomerEditModel model)
В какой-то момент мы делали последнее (отдельное). Но в последнее время мы начали делать первые (общие).
Причиной этого изменения было то, что:
-
С ненавязчивой проверкой MVC3, если я использую DataAnnotations для моей модели для проверки, это необходимо в обеих моделях, если они разделены (в модели дисплея для сопоставления проверки на стороне клиента и в модели редактирования для проверки на стороне сервера).
-
По мере того, как наше приложение созрело, мы поняли, что наши модели отображения и редактирования были на 95% идентичны, за исключением списков выбора, которые были в наших моделях просмотра. Теперь мы переместили их в общий класс и теперь передаем их через представление.
Но я видел некоторые другие обсуждения, которые указывают на то, что общие модели для представления/контроллера плохое, и что он нарушает разделение проблем.
Может кто-нибудь помочь мне понять компромиссы для этих двух подходов?