¿Qué es la "lógica de presentación" y cuánto es aceptable en las vistas?

13

En mi aplicación web tengo que proporcionar un formulario para crear y editar. Los formularios para crear y editar tienen pequeñas diferencias, así que estoy pensando en hacer algo como esto en mi opinión:

<form>
// a lot of htnl goes here 
@if (editing)
{
  // some more fields shown in edit mode
}
@if(!editing)
{
 // some stuff shown in create mode
}

Siempre he tratado de no poner ninguna ifdeclaración en mis puntos de vista, pero esta vez no veo ninguna otra opción, excepto copiar una gran parte de HTML en dos lugares, lo que no quiero hacer. ¿Es esta la "lógica de presentación" adecuada y hay otras opciones?

Georgi Georgiev
fuente

Respuestas:

17

La lógica de presentación comprende la lógica y los cálculos necesarios para presentar los datos comerciales de la manera correcta para una vista particular.
Para vistas gráficas complejas, esto puede ser cálculos bastante complejos (por ejemplo, calcular el tamaño de cada sector circular y la posición de las etiquetas para un gráfico circular), pero la característica principal es que solo calcula información relevante para el actual ver y que no modifica los datos comerciales de ninguna manera.

Es discutible si la selección de campos para el modo de edición / creación es un uso adecuado de la lógica de presentación. En parte, depende del tipo y la cantidad de personalización.
Por ejemplo, si la diferencia es solo un cambio de título, o muestra uno o dos campos como de solo lectura en uno de los modos, entonces puede ser la opción correcta tener una vista y seleccionar los modos dinámicamente.
Por otro lado, mi primera reacción fue que realmente debería ser dos vistas diferentes, donde las partes comunes se importan desde un tercer archivo (similar a la frecuencia con que se agregan el encabezado y el pie de página a las vistas).

Bart van Ingen Schenau
fuente
12

Parece perfectamente razonable usar una declaración @if o dos en una vista Razor.
Agregaron @if a Razor: está destinado a ser utilizado.

Su código podría acortarse a uno @ si:

@if (editing)
{
  // some more fields shown in edit mode
}
else
{
 // some stuff shown in create mode
}

Una alternativa es usar tres vistas:

  • Vista parcial que contiene el HTML común
  • Crear vista (llama a la vista parcial)
  • Editar vista (también llama a la vista parcial)

Puede consultar DisplayTemplates y EditorTemplates, que son una buena forma de dividir las vistas de solo lectura y editables.

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html


fuente