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