Che cos'è la "logica di presentazione" e quanto è accettabile nelle viste?

13

Nella mia applicazione web devo fornire un modulo per la creazione e la modifica. Le forme per la creazione e per la modifica hanno differenze minori, quindi penso di fare qualcosa del genere a mio avviso:

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

Ho sempre cercato di non inserire alcuna istruzione if nelle mie visualizzazioni, ma questa volta non vedo altre opzioni tranne la copia di una porzione enorme di HTML in due punti, cosa che non voglio fare. Questa è la corretta "logica di presentazione" e ci sono altre opzioni?

    
posta Georgi Georgiev 23.09.2014 - 09:14
fonte

2 risposte

17

La logica di presentazione comprende la logica e i calcoli necessari per presentare i dati aziendali nel modo giusto per una vista particolare.
Per viste grafiche complesse, questo può essere un calcolo abbastanza complesso (ad esempio, calcolando la dimensione di ciascuna fetta di torta e il posizionamento delle etichette per un grafico a torta), ma la caratteristica principale è che calcola solo le informazioni rilevanti per l'attuale visualizzare e che non modifica in alcun modo i dati aziendali.

Se la selezione dei campi per la modalità di modifica / creazione è un uso appropriato della logica di presentazione è discutibile. In parte dipende dal tipo e dalla quantità di personalizzazione.
Ad esempio, se la differenza è solo una modifica del titolo o la visualizzazione di uno o due campi come di sola lettura in una delle modalità, può essere la scelta giusta per avere una vista e selezionare le modalità in modo dinamico.
D'altra parte, la mia prima reazione è stata che avrebbe dovuto essere in realtà due diverse viste, in cui le parti comuni sono importate da un terzo file (simile a quanto comunemente l'intestazione e il piè di pagina vengono aggiunti alle viste).

    
risposta data 23.09.2014 - 09:55
fonte
12

Sembra perfettamente ragionevole usare un'istruzione @if o due in una vista Razor.
Hanno aggiunto @if al Rasoio - è pensato per essere usato.

Il tuo codice potrebbe essere abbreviato in un @if:

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

Un'alternativa è usare tre viste:

  • Vista parziale contenente l'HTML comune
  • Crea vista (chiama la vista parziale)
  • Modifica vista (chiama anche la vista parziale)

Puoi controllare DisplayTemplates e EditorTemplates, che sono un buon modo per dividere viste di sola lettura e modificabili.

link

    
risposta data 23.09.2014 - 12:40
fonte