¿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, por lo 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 intentado no incluir ninguna declaración if en mis visitas, pero esta vez no veo ninguna otra opción, excepto copiar una gran parte del HTML en dos lugares, lo que no quiero hacer. ¿Es esta "lógica de presentación" adecuada y hay otras opciones?

    
pregunta Georgi Georgiev 23.09.2014 - 09:14

2 respuestas

17

La lógica de presentación comprende la lógica y los cálculos que se necesitan 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 y el posicionamiento de las etiquetas para un gráfico circular), pero la característica principal es que solo calcula la información que es relevante para la corriente Ver y que no modifica los datos comerciales de ninguna manera.

Es discutible que la selección de campos para el modo de edición / creación sea un uso adecuado de la lógica de presentación. En parte depende del tipo y cantidad de personalización.
Por ejemplo, si la diferencia es solo un cambio de título, o que 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 de forma dinámica. Por otro lado, mi primera reacción fue que realmente deberían ser dos vistas diferentes, donde las partes comunes se importan desde un tercer archivo (similar a la forma en que comúnmente se agregan el encabezado y el pie de página a las vistas).

    
respondido por el Bart van Ingen Schenau 23.09.2014 - 09:55
12

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

Tu código podría reducirse a uno @if:

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

Una alternativa es utilizar 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)

Podrías ver DisplayTemplates y EditorTemplates, que son una buena manera de dividir vistas de solo lectura y editables.

enlace

    
respondido por el user147272 23.09.2014 - 12:40

Lea otras preguntas en las etiquetas