2009-04-21 21 views
11

Acabo de terminar el tutorial Nerd Diner de Scott Gu. Lo encontré muy útil porque no solo enseñaba los conceptos básicos de ASP.Net MVC, sino también cómo usarlos con Repositorios, Validación, Pruebas de unidades, Ajax, etc. Muy bien, pero aún manejable.ASP.Net MVC View Structure

Sin embargo, tengo curiosidad acerca de su estructura del sitio:

Específicamente, se utiliza este punto de vista strucuture para cada objeto:
/ModelObject/Editar/
/ModelObject/Crear/

luego se extrae la elementos comunes entre los dos puntos de vista y ponerlos en un parcial.

Entiendo la lógica, pero parece que llevaría a "ver explosión" si tiene incluso un número moderado de tablas en su base de datos.

Scott es realmente bueno, así que estoy asumiendo que su estructura es la correcta. Pero me gustaría saber por qué.

Gracias!

[Editar aclaraciones]

me doy cuenta de que muchas veces es necesario para que haya múltiples acciones (y vistas) para manejar las diferencias en la crea y edita. Es el caso de la muy simple edición y creación, donde la única diferencia entre las dos acciones es en un caso el modelo tiene una ID y necesita ser actualizado, y en el otro caso el modelo no, por lo que debe ser insertado.

En este caso, ¿está violando la regla "Dumb View" usando la misma vista para manejar ambos casos y causar problemas graves?

Respuesta

6

La estructura de la vista se basa en los controladores, no en el modelo directamente. En la metodología Mvc, debe tener una vista para cada acción (cada método público, en esencia) en un controlador. Las acciones del controlador no tienen que coincidir directamente con cada tabla de la base de datos, pero es probable que exista algún tipo de relación directa entre el número de tablas en la base de datos y el número de controladores y vistas. Los controladores son más altos nivel

Es normal tener acciones de tipo CRUD en el controlador, cuando son aplicables:

  • Índice: Lista de los artículos
  • Detalles: ver un artículo específico
  • Edición: editar un elemento
  • Crear: nuevo elemento
  • eliminar: eliminar un elemento

Cada una de estas acciones requerirá una vista (y a veces más de una).

Por lo tanto, sí, puede recopilar una gran cantidad de vistas si se trata de una aplicación grande. La forma de minimizar el código es:

  • Extracto funcionalidad compartida con vistas parciales, como para mantener los puntos de vista de acción tan pequeño y simple como sea posible
  • Mantener las vistas y controladores sencilla para que sean fáciles de mantener
  • uso de AJAX para implementar una mayor funcionalidad en una sola vista

es importante señalar que cualquier aplicación grande va a tener un montón de formas. Ya sea Mvc o Web Forms, si hay una gran cantidad de datos para trabajar, se necesitarán muchos formularios para hacerlo.

+1

¿Por qué enumerar eliminar? Eliminar rara vez requiere su propia vista, normalmente se trata como una acción iniciada en el índice, detalle o vista de edición. – Aaron

+2

Tienes razón, generalmente se hace de esa manera, pero lo he visto en ambos sentidos. A veces hay una vista para confirmación (en lugar de una ventana emergente de JavaScript) o como un retroceso por no tener javascript habilitado. –

+0

@StevenLyons ¿tiene un enlace para una configuración bien estructurada de las múltiples vistas que utilizan las vistas parciales correctamente?Estoy tratando de encontrar algunos ejemplos BUENOS para poder entender cómo estructurar las vistas en la aplicación en la que estoy trabajando. – ganders

1

si tiene antecedentes como desarrollador de asp.net webforms, su respuesta es natural. Hay varias preguntas, depende del punto de vista. Al principio, con asp.net-mvc no tenemos controles de servidor completamente equipados que nos hagan muchas cosas, sin una conciencia real de lo que hacen. Ahora tiene que escribir más código y tener ojos como un cirujano en html. De esta forma puedo encontrar una pregunta razonable para "ver explosión" Otros proyectos siguen más o menos esa estructura, vea el proyecto de Rob Conery: Mvc Storefront

PS: "controladores flacos, Modelo de grasa y ... Ver mudo"

[actualización de la respuesta a la aclaración]

MHH .. creo que no hay violación de la "vista mudo". Lo importante es que todas las vistas no tienen nada que ver con el código en la capa de lógica de negocios o en su modelo. Puede tener un botón "Guardar", es el controlador debe saber qué acción debe ejecutarse, insertar o actualizar.

2

Es cierto que esto puede prestarse a muchas vistas. Sin embargo, he descubierto que en mis aplicaciones de la vida real, tendré una cantidad de tablas que no tengo una correlación 1: 1 con las operaciones CRUD. Si bien ciertamente tengo datos que se incluyen en esas tablas, he encontrado que la mayoría de las veces una vista presenta datos de al menos dos, sino tres o más tablas. Al igual que cualquier otra aplicación, debe saber lo que está buscando para poder planificar las cosas. Cualquier aplicación de gran tamaño va a requerir un poco de planificación inicial (lo que incluiría analizar el número de vistas/controladores para MVC).

Son solo las pequeñas aplicaciones las que puedes colgar juntas en función de tus corazonadas y tu experiencia pasada.

1

En más reflexión, esto es lo que pienso:
La combinación de la edición/creación de puntos de vista sería fácil en modelos simples porque

    - Las mismas propiedades que aparecen
    - Las mismas validaciones

PERO haciendo esto lo forzaría a

    - manejar tanto la actualización e insertar en la misma acción
    - utilizar una sentencia de control en la vista para determinar qué ver acción se utiliza para actualizar

Ambas opciones parecen feo e innecesario cuando es tan fácil de usar acciones separadas y vistas separadas con código común extraído en un parcial.