Вопрос

При использовании 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 напрямую, чтобы извлечь отправленные значения. Это большая работа, но у нее есть свои преимущества, например, один из видов защитного программирования.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top