2011-04-25 20 views
6

Necesito un control de cordura rápido. Estoy tratando de diseñar mis puntos de vista de modo que sean limpios, concisos y tan libres de cualquier tipo de lógica condicional como sea posible. Sin embargo, estoy teniendo dificultades para librarlos de todas las declaraciones condicionales. Me pregunto si es inevitable tener algunas declaraciones condicionales en las vistas.¿Las declaraciones condicionales en las vistas son malas noticias?

Por ejemplo:

@if (Model.UserCanEdit) 
{ 
    <button type="button" id="Edit">Edit</button> 
} 

No hay muchas opciones si usted tiene una visión que tiene varios elementos que pueden cambiar o ser mostrados/ocultos dependiendo de varias condiciones.

¿Qué pautas debo seguir respecto a dónde trazar la línea para permitir la lógica condicional en sus vistas? ¿Cuáles son algunas formas de reducir la lógica condicional en mis puntos de vista en los que no estoy pensando?

Gracias de antemano.

Respuesta

10

No diría que todo está mal al usar condicionales en Vistas: después de todo, el objetivo principal de una vista es mostrar datos de su Modelo. (Se requieren ya veces las sentencias condicionales para mostrar los datos.)

Sin embargo - el uso de una gran cantidad de condicionales puede hacer que el mantenimiento de una pesadilla y, finalmente, la legibilidad. Es importante recordar que no incluyen condicionales en la medida de convirtiéndose en lógica comercial, pero permiten que cumplan su propósito como "lógica de presentación".

alternativas posibles:

HTML personalizado Ayudantes:

Si no están locos por el uso de los condicionales - se puede ver en el uso ayudantes para limpiar un poco las cosas.Para obtener más información sobre el registro de entrada fuera Creating Custom HTML Helpers.

Vistas adicionales/parciales Vistas:

Además, como muchos señalarán - el uso de condicionales para hacer una sola función de vista como múltiples puntos de vista deben no es la mejor manera de abordar ese problema.

+2

+1 para el segundo párrafo. Dependiendo de lo que sea el condicional, puede ser simplemente lógica de presentación. Se podría argumentar que la vista debería tener la menor lógica que sea necesaria, y que cualquier parámetro que determine la vista podría haberse transmitido a un nivel inferior. Después de todo, si puede elegir entre dos datos para mostrar (incluso si una opción no muestra nada), su vista tiene datos que realmente no necesita en todos los casos. – corsiKa

1

En el mejor de los casos, intente evitarlos tanto como sea posible. Comienzan bastante simple, pero más adelante todo puede convertirse en un montón de código de spaghetti. Diciendo que no siempre es posible y casi inevitable que tendrías que hacerlas.

Normalmente divide sus vistas o (tiene varias vistas parciales) y luego decide el bit if/else en el controlador. Esto asegura que sus ViewModels también se mantengan diferentes.

-

Como regla general, desde mi experiencia, siempre trato de entender el punto de vista comercial de los puntos de vista en lugar de la técnica. A veces sus dos vistas pueden parecer muy similares en este momento y pueden necesitar solo un par de if/else para diferenciarse, PERO a nivel empresarial son diferentes y es obvio que más adelante cada vista tendría muchos requisitos nuevos que representarían es totalmente diferente de la otra vista. Teniendo en cuenta la perspectiva empresarial, debe crear vistas separadas y modelos de vista para ambos.

3

Muchas comprobaciones en su código pueden indicar que está tratando de hacer que una vista se comporte como dos vistas separadas.

Podría ser mejor tener una verificación en el nivel del controlador y luego presentar una vista diferente con un modelo adaptado adecuadamente. De esta forma, cada vista permanece 'tonta' y no le está pasando más información de la necesaria.

Para responder directamente a su pregunta, en teoría, es posible evitar 'todos' los controles condicionales al tener una vista separada para cada estado. Sin embargo, puede tener una vista que se ajuste a múltiples propósitos similares y tener condicionales mientras se mantiene el código legible no es irrazonable.

+0

Lo consideraría (y lo haré) si se tratara de una de dos vistas. Pero el número de combinaciones de condiciones posibles suele ser mucho más que dos. Por ejemplo, imagine una vista con varias acciones de enlace diferentes, y cada acción se muestra en función de un nivel graduado de permisos, donde cuantos más permisos tenga, más podrá hacer en la vista. Así que, de nuevo, realmente no veo ninguna manera de evitar tener varias condiciones desperdigadas a lo largo de la vista. –

+0

Jerad Rose: podría separar su proyecto en áreas como administrador, propietario, miembro, etc. De lo contrario, se mencionó anteriormente una solución que utiliza ayudantes. – Alex

Cuestiones relacionadas