Qu'est-ce que la «logique de présentation» et combien est acceptable dans les vues?

13

Dans mon application web, je dois fournir un formulaire de création et d'édition. Les formulaires de création et d'édition ont des différences mineures, donc je pense à faire quelque chose comme ça à mon avis:

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

J'ai toujours essayé de ne mettre aucune ifdéclaration dans mes vues, mais cette fois je ne vois pas d'autre option que de copier une énorme portion de HTML à deux endroits, ce que je ne veux pas faire. Cette «logique de présentation» est-elle appropriée et existe-t-il d'autres options?

Georgi Georgiev
la source

Réponses:

17

La logique de présentation comprend la logique et les calculs nécessaires pour présenter les données métier de la bonne façon pour une vue particulière.
Pour les vues graphiques complexes, il peut s'agir de calculs assez complexes (par exemple, le calcul de la taille de chaque secteur et le positionnement des étiquettes d'un graphique à secteurs), mais la principale caractéristique est qu'il ne calcule que les informations pertinentes pour le courant vue et qu'il ne modifie en aucune façon les données de l'entreprise.

Que la sélection des champs pour le mode édition / création soit une utilisation appropriée de la logique de présentation est discutable. Cela dépend en partie du type et de la quantité de personnalisation.
Par exemple, si la différence est juste un changement de titre, ou en affichant un ou deux champs en lecture seule dans l'un des modes, alors il peut être le bon choix d'avoir une vue et de sélectionner les modes dynamiquement.
D'un autre côté, ma première réaction a été qu'il devrait vraiment s'agir de deux vues différentes, où les parties communes sont importées à partir d'un troisième fichier (similaire à la manière dont l'en-tête et le pied de page sont ajoutés aux vues).

Bart van Ingen Schenau
la source
12

Il semble parfaitement raisonnable d'utiliser une instruction @if ou deux dans une vue Razor.
Ils ont ajouté @if à Razor - il est destiné à être utilisé.

Votre code pourrait être raccourci à un @if:

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

Une alternative consiste à utiliser trois vues:

  • Vue partielle contenant le HTML commun
  • Créer une vue (appelle la vue partielle)
  • Modifier la vue (appelle également la vue partielle)

Vous pouvez consulter les modèles d'affichage et les modèles d'édition, qui sont un bon moyen de diviser les vues en lecture seule et modifiables.

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


la source