2009-07-30 12 views
6

Me pregunto si UpdateModel se considera una operación "costosa" (debido a la búsqueda de Reflejo de las propiedades del modelo), especialmente cuando se ve en el contexto de una aplicación web más grande (piense en StackOverflow)?ASP.NET MVC: ¿UpdateModel es una operación "costosa" (debido a Reflection)?

No quiero involucrarme en una optimización prematura pero considero que es una opción de diseño para usar UpdateModel por lo que me gustaría saber con anticipación si es recomendable o no. La otra opción (tediosa) es escribir mi propio método UpdateModel para varios objetos de dominio con propiedades fijas.

¡Gracias!

Respuesta

5

Eres muy inteligente para querer a no participar en la optimización prematura. Sobre todo porque esta "optimización" favorecería el tiempo del procesador sobre el suyo, que es mucho más costoso.

La principal regla de optimización es optimizar primero las cosas lentas. Así que considere la frecuencia con la que realmente actualiza un modelo en comparación con la selección desde el back-end de la base de datos. Supongo que es 1/10 tan a menudo o menos. Ahora considere el costo de seleccionar desde el back-end de la base de datos versus el costo de la reflexión. El costo de la reflexión se mide en milisegundos. El costo de seleccionar desde el back-end de la base de datos se puede medir en segundos en el peor. Mi experiencia es que los POST rara vez son muy lentos, y cuando lo son, suele ser la base de datos el que falla y no el reflejo. Creo que es probable que gaste la mayor parte de su tiempo de optimización en GET.

0

Creo que UpdateModel es un atajo que causa una gran cantidad de acoplamiento entre la vista y el modelo.

Elijo no usar modelos "incorporados" (como poder pasar objetos creados por LINQ a la vista directamente desde la base de datos) porque quiero la opción de reemplazar mi modelo por algo más sofisticado, o incluso simplemente otro proveedor de base de datos. Sin embargo, es muy tentador usar LINQtoSQL (o Entidades ADO.NET) para crear rápidamente prototipos.

Lo que suelo hacer es crear mi aplicación MVC, luego exponer una capa de 'servicio' que luego se conecta a un 'modelo' (que es una vista OO de mi dominio). De esa manera, puedo crear fácilmente una capa de servicio web, intercambiar bases de datos, escribir nuevos flujos de trabajo, etc., sin preocuparse.

(y asegúrese de escribir sus pruebas y el uso DI - se ahorra un montón de problemas)

Rob

+3

Creo que el objetivo de su pregunta sigue siendo el mismo, ya sea que actualice los objetos de dominio directamente o use un modelo de edición especializado (que yo también recomiendo). –

2

En comparación con la latencia de red, las llamadas a la base de datos y el IO general, la llamada a UpdateModel() es trivial y no me molestaría en hacerlo.

Cuestiones relacionadas