Просмотр моделей Asp.Net MVC
-
22-07-2019 - |
Вопрос
При использовании MVC и преобразовании ваших данных в ViewModels какой общепринятый способ сделать это?
На данный момент я использую AutoMapper для этого, и он работает хорошо.Однако я видел в статье блога (я думаю, это был Роб Си) наличие конструктора в ViewModel, который принимает количество требуемых параметров, а затем генерирует ViewModel
Например var RetViewModel = new ViewModel(MyObject);
Это кажется достойным способом сделать это, не так ли?
Решение
"Общепринятый способ" - это, как правило, тот способ, который лучше всего подходит для вас.
Я никогда не слышал об AutoMapper, и когда я изучил его, то понял, что он создает магическое отображение объектов, следуя определенному соглашению.
Скринкаст по адресу: http://www.dnrtv.com/default.aspx?showNum=155
Примечание:Я просмотрел только около половины этого скринкаста, так что мои мысли об AutoMapper несколько неполны.
Я лично не хочу его использовать, потому что это требует, чтобы я писал дополнительный код для сопоставления / "сглаживания" между свойствами объекта (код, IMO, лучше оставить в логике конструктора).В примере с скринкастом этот код обычно помещается в методы действий контроллера, что может привести к раздуванию.(Мне нравятся тонкие контроллеры / действия)
Я использую метод, который вы привели в своем посте, заставляя конструктор модели брать объект и выполнять всю работу.
Кроме того, я всегда создаю пустой конструктор, который не принимает параметров, чтобы я мог вручную задать значения свойств объекта ViewModel.
Пример:
CustomViewModel myModle = new CustomViewModle
{
Property1 = "Something",
Property2 = 3,
//etc..
};
Подводя итог, попробуйте оба способа и посмотрите, что сработает у вас.AutoMapper - отличная идея, и я вижу, что она помогает во многих ситуациях, однако, я думаю, что в некоторые моменты при ее использовании вы будете писать столько же кода, используя его, сколько если бы вы использовали конструкторы объектов.
Другие советы
Ну, официально рекомендованное " подход заключается в том, чтобы механизм привязки модели справился с этим за вас. Это проще и автоматизирует процесс. Модель должна будет выставить свои свойства для чтения-записи, чтобы связыватель мог ее инициализировать.
Второй вариант, о котором вы говорите, вероятно, выиграет от того, что ваши модели станут неизменяемыми объектами. То есть вы делаете все свойства доступными только для чтения и инициализируете их один раз через параметры конструктора. Это потребует, чтобы вы заглянули в FormCollection напрямую, чтобы извлечь отправленные значения. Это большая работа, но у нее есть свои преимущества, например, один из видов защитного программирования.
Я не могу сказать, какой путь лучше, оба варианта. Я лично предпочитаю второй стиль на данный момент.