2011-06-23 28 views
14

¿Cómo organizas tus controladores, métodos y vistas cuando usas un modelo MVC con jQuery con muchos bits AJAX?AJAX y jQuery con MVC

Pregunta 1

¿Tiene un controlador separado sólo para llamadas AJAX, o ¿Mezcla los métodos AJAX junto con sus métodos no habituales AJAX en un solo controlador?

Pregunta 2

Si se va a mezclar AJAX y métodos no AJAX en un solo controlador, ¿tiene métodos AJAX y no AJAX separadas, o hacer que se combinan entre sí (si es posible) y pasar un valor (NULL o AJAX) que determina si una vista normal o una vista AJAX se devuelve al navegador.

Pregunta 3

Si tiene 50 diferentes llamadas AJAX, y cada llamada requiere un método, que a su vez requiere una visión, que terminan con un controlador con 50 métodos y 50 visitas. ¿Es esta una buena práctica de MVC? Puedo pensar en todos los métodos AJAX en el controlador que comparten una única vista, donde el archivo de vista contiene sentencias condicionales de casos y el archivo de vista se pasa un parámetro que determina cuál de los 50 casos se utilizará. Algo así como la compresión de 50 visitas a 1.

Pregunta 4

En lugar de tener tantos puntos de vista (50 visitas), ¿cuál cree que haciéndose eco de la salida en el método de controlador en lugar de en la vista ? De esta manera no tendremos tantos puntos de vista.

Por cierto, estoy usando marco CodeIgniter PHP para mi modelo MVC

Respuesta

10

Pregunta 1

mezclo el ajax y código no ajax en al mismo controlador. De esta forma, su código se encuentra en un lugar común, fácil de encontrar.

Pregunta 2

combino ajax y método no ajax juntos. Hace que sea más fácil de usar javascript Progressive Enhancement por lo que las personas sin javascript seguirán publicar al mismo controlador

Pregunta 3

Usted no debería tener 1 controlador con 50 métodos. Deberías tener un controlador por pieza de funcionalidad. Así que un controlador de usuario, un controlador Foo, un controlador de barra, por lo que puede terminar con 10 controladores con 5 métodos cada uno. De esta forma, los métodos pertenecen a clases específicas de su función. Tengo vistas separadas y no una gran vista. NO debe utilizar LOGIC dentro de las vistas para determinar qué se muestra, este es el trabajo del controlador. Sin embargo, algunos controladores de E/métodos pueden devolver la misma vista que otros métodos

Pregunta 4

o controlador debe NUNCA HTML de salida. Use las vistas para esto que es toda la información de MVC para separar las preocupaciones del Código (controladores de) Vistas (representación). Algunas veces mis vistas solo devuelven JSON o XML y luego uso plantillas de Javascript para actualizar el DOM. Othertimes mis puntos de vista devuelven HTML. Por ejemplo, una función Guardar en un formulario. Podría devolver un booleano si tiene éxito. Entonces mi Javascript se escondería o mostraría un DIV dependiendo de la respuesta.

+0

BTW Estoy usando MVC .NET así que YMMV para PHP – Daveo

+0

Mi administrador de administración, Esto tiene 70 métodos. Mi administrador general utiliza un controlador es tan malo. ¿Dónde puedo encontrar una buena arquitectura de mvc. – Gowri

3

Pregunta 1 - controlador separado para AJAX. Si está utilizando servlets, debe utilizar el nuevo soporte de servlet 3.0 para soporte asíncrono.

http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=2

Pregunta 2 - Ya que estamos usando controlador separado esto no es aplicable.

Pregunta 3: ¿Ve un escenario donde tiene 50 llamadas únicas sin funcionalidad solapada? Aunque tiene 50 llamadas AJAX, puede haber muchas reutilizaciones en el servidor para atender estas solicitudes. Entonces 50 llamadas no equivalen a 50 métodos. Puede envolver cada solicitud con un comando & ejecutar apropiadamente en lugar de if if lo cual puede salirse de control.

Pregunta 4 - 50 llamadas pueden no ser iguales a 50 vistas. Usted necesita reutilizar aquí también. Debe separar sus componentes de vista & armarlos. Se reduce al diseño.

3

Cuando realiza una llamada jQuery AJAX, jQuery agrega un encabezado HTTP X-Requerido-Con que puede usar para determinar si una solicitud determinada es una solicitud AJAX o no. Con esto en mente, a menudo tiene sentido compartir la misma acción de controlador entre AJAX y solicitudes tradicionales, crear un modelo y luego renderizar una vista con ese modelo para solicitudes tradicionales o responder con una representación serializada JSON del mismo modelo para AJAX peticiones.