2011-01-17 18 views
6

Acabo de pensar en el concepto de objeto de modelo de vista que creamos en asp.net MVC. Nuestro objetivo es instanciarlo y pasarlo desde el controlador para verlo y visualizarlo y mostrar los datos.Asp .Net MVC Viewmodel debe ser de clase o struct?

Los modelos de vista suelen crearse instancias a través del constructor. No necesitaremos inicializar los miembros, puede que no necesitemos redefinir/anular el constructor sin parámetros y no necesitamos la función de herencia allí.

Entonces, ¿por qué no utilizamos el tipo de estructura para nuestro modelo de vista en lugar de clase? Mejorará el rendimiento.

Respuesta

13

Usted toma "mejorará el rendimiento" como algo dado, pero ¿está seguro de esto? Las estructuras funcionan mejor que las clases en circunstancias muy específicas. Estoy generalizando por simplicidad, pero los escenarios son principalmente:

  • Son inmutables.
  • Son pequeños, p. Ej. generalmente no más de 3 - 4 campos.
  • Está generando toneladas (a menudo millones o más) de ellas en un lapso de tiempo extremadamente corto.
  • Usted está trabajando con ellos en bucles apretados.
  • Las rutas de código por las que viajan están optimizadas para esas estructuras específicas y no realizan operaciones de box/unboxing.

Hay otros, pero eso está fuera de mi cabeza. E incluso entonces, estamos hablando de ganancias de rendimiento a menudo minúsculas. Como en microsegundos minúsculo.

Incluso si puede garantizar que sus modelos de vista son inmutables y pequeños, las otras condiciones no se cumplen. Asumiendo un modelo de vista por solicitud, su servidor web no manejará millones de solicitudes por segundo. Además, el marco MVC no funciona con estos en bucles estrechos y no contiene rutas de código optimizadas para esta estructura en particular. El marco MVC terminará realizando toneladas de operaciones de box/unboxing en sus tipos de valores como resultado.

Conclusión: no micro-optimice o sobreinyecte su solución. Las clases están bien. Y cuando se trata de la optimización, mida siempre para asegurarse de que está dedicando su tiempo a una empresa que valga la pena. No te molestes con trivialidades cuando hay peces más grandes para freír.

+0

Muchas gracias por su tiempo y una explicación detallada, Levi. Tus pensamientos me alegran el día. –

+2

Además, una estructura se pasa a través de la pila (más información para transferir) y la clase se pasa a través del montón a través de un puntero (menos información para transferir). Sé que es una vieja pregunta, pero los visitantes nuevos merecen saber más. –

0

utiliza una clase. algunos modelos de vista requieren constructores, convertidores y tal vez más funcionalidad, ¿por qué limitarse a struct? (como si tuviera objetos EF4 y necesita hacer POCO de ellos ...)

Cuestiones relacionadas