Asp .Net MVC Viewmodel должен быть классом или структурой? - PullRequest
7 голосов
/ 17 января 2011

Я только что подумал о концепции объекта модели представления, которую мы создаем в asp.net MVC.Наша цель - создать его экземпляр и передать его из контроллера для просмотра, просмотра, просмотра и отображения данных.

Эти модели представления обычно создаются через конструктор.Нам не нужно инициализировать элементы, нам может не понадобиться переопределять / переопределять конструктор без параметров, и нам не нужна функция наследования.

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

Ответы [ 2 ]

16 голосов
/ 17 января 2011

Вы принимаете «это повысит производительность» как данность, но вы действительно уверены в этом?Структуры работают лучше, чем классы в очень специфических обстоятельствах.Я обобщаю для простоты, но сценарии в основном таковы:

  • Они неизменны.
  • Они маленькие, например, обычно не более 3 - 4 полей.
  • Вы генерируете тонн (часто миллионы или более) из них в течение чрезвычайно короткого промежутка времени.
  • Вы работаете с ними в тесных циклах.
  • Пути кода, по которым они проходят, оптимизированы для этих конкретных структур и не выполняют операций упаковки / распаковки.

Есть и другие, но это только у меня в голове.И даже тогда мы говорим о зачастую незначительном приросте производительности.Как в микросекундах минут.

Даже если вы можете гарантировать, что ваши модели представления неизменны и крошечны, другие условия не выполняются.Предполагая одну модель просмотра на запрос, ваш веб-сервер не будет обрабатывать миллионы запросов в секунду.Кроме того, инфраструктура MVC не работает с ними в тесных циклах и не содержит путей кода, оптимизированных для этой конкретной структуры.В результате инфраструктура MVC в результате выполнит тонны операций по упаковке / распаковке для ваших типов значений.

Итог - не оптимизируйте и не переусердствуйте в своем решении.Классы просто отлично.А когда речь идет об оптимизации, всегда измеряет , чтобы убедиться, что вы посвящаете свое время стоящему предприятию.Не беспокойтесь о мелочах, когда нужно жарить больше рыбы.

0 голосов
/ 17 января 2011

используйте класс. некоторые модели представлений требуют конструкторов, конвертеров и, возможно, большей функциональности, зачем ограничивать структурой? (например, если у вас есть объекты EF4 и вам нужно сделать из них POCO ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...