Должен ли я в MVC3 иметь отдельные модели «редактирования» и «модели отображения»?

С MVC3, следует ли мне проектировать свои модели представления так, чтобы одна была привязана к представлению (DisplayModel), а другая отправлялась обратно в контроллер (EditModel) ?

Чтобы уточнить, я не спрашиваю о моделях данных и моделях представлений - я знаю, что нецелесообразно привязывать мои представления / контроллеры к моделям данных / предметной области.

Я также не спрашиваю о совместном использовании одной модели в двух отдельных представлениях: одно представление используется для отображения данных, а другое представление используется для редактирования данных.

Скорее, я спрашиваю об одном представлении, которое используется для редактирования данных, и модели, которая привязана к представлению, в сравнении с моделью, привязанной к действию контроллера.

Другими словами, если это мое мнение:

@model MyApp.Models.CustomerModel

Должно ли действие моего контроллера выглядеть так:

public ActionResult Index(CustomerModel model)

Или:

public ActionResult Index(CustomerEditModel model)

В какой-то момент мы делали последнее (отдельно). Но в последнее время мы начали делать первое (совместное использование).

Причина этого изменения заключалась в следующем:

  1. При ненавязчивой проверке MVC3, если я использую DataAnnotations в своей модели для проверки, это необходимо в обеих моделях, если они разделены (на модели отображения для отображения клиентских - на стороне валидации и на модели редактирования для валидации на стороне сервера).

  2. По мере развития нашего приложения мы поняли, что наши модели отображения и редактирования на 95% идентичны, за исключением списков выбора, которые были в наших моделях представления. Теперь мы переместили их в общий класс и теперь передаем их через представление.

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

Может ли кто-нибудь помочь мне понять компромисс между этими двумя подходами?

18
задан Community 23 May 2017 в 11:45
поделиться