2011-05-25 28 views
9

Recientemente surgió un debate sobre por qué ASP.NET MVC no utiliza métodos estáticos para sus métodos de controlador. Mientras estaba en el lado de la valla contra usando métodos estáticos, los únicos 2 argumentos que podía pensar para los métodos de acción no estáticos eran la herencia y la capacidad de simulacro (que la herencia le brinda).Controladores ASP.NET MVC métodos estáticos

¿Cuál fue la elección de diseño de Microsoft para acciones/métodos no estáticos sobre estáticos?

Respuesta

26

Aunque no sé mentes de aquellos que diseñaron el marco ASP.NET MVC aquí es el grande para mí:

Un controlador ejemplo, se crea una instancia de una vez por pedido, múltiples peticiones puede estar ocurriendo simultáneamente. Si un controlador es estático, cualquier estado en el controlador se comparte en todas las solicitudes simultáneamente. Probablemente no quieras eso. La actualización de ese estado compartido se convierte en un campo minado de contención de bloqueo, posibles bloqueos y muy difícil de rastrear errores si el bloqueo no se implementa correctamente.

En resumen, un controlador estático sería una pesadilla para trabajar.

+0

No estoy muy seguro de que realmente haya definido algún motivo. Simplemente explicaste por qué la estática en los entornos web puede provocar comportamientos inesperados. –

+10

Seguramente el hecho de que pueda "dar lugar a comportamientos inesperados" es una razón válida para no usarlos como parte del marco ASP.NET MVC. Mi respuesta es, por supuesto y como indiqué, especulativa ya que no conozco las mentes de aquellos que crearon el marco. Sin embargo, sigue siendo una razón potencial. –

+1

+1 esto es perfecto. – Fenton

Cuestiones relacionadas