Dovrei usare un'istruzione large if in una vista o creare una vista completamente diversa?

3

Sto utilizzando l'architettura MVC Laravel 4.2 per creare un'applicazione web relativamente complessa. Questa applicazione è costituita da un sito Web che è strongmente basato sul fatto che si è verificato o si verificherà un evento. Ad esempio, se un evento è in futuro, visualizzerò un conto alla rovescia, mentre se è nel passato, visualizzerò le informazioni su di esso.

Nel complesso, circa il 50% dell'intero markup "pagina" può essere unico a seconda che si sia verificato o si verifichi.

La mia domanda è , dovrei usare un'istruzione di grandi dimensioni all'interno della vista per visualizzare ciò che voglio in base alla sua occorrenza futura / passata (Sì! Altrimenti violerai DRY con markup duplicato) o dovrei creare una vista che contiene il markup per eventi futuri e un'altra vista che contiene il markup per eventi passati e ottenere il mio controller per il routing alla vista applicabile (Sì! Le viste dovrebbero essere stupide e la logica di routing dovrebbe essere lasciata a il controller).

Quale sarebbe la scelta giusta in questa situazione, o più appropriatamente quali domande potrei chiedermi per aiutarmi a determinare l'approccio migliore da adottare in futuro?

    
posta ReactingToAngularVues 19.01.2015 - 08:15
fonte

2 risposte

4

Anche se le viste non devono contenere la logica aziendale, possono contenere la logica condizionale, i loop, ecc.

di base

Dato che il tuo sito web è "strongmente basato sul fatto che si è verificato o si verificherà un evento", questo è definitivamente un caso in cui avrai due visualizzazioni, non una.

What questions could I ask myself to help me determine the best approach to take to this in the future?

Ciò che dovresti chiedere a te stesso è se ciascuna vista corrisponde a una pagina , come sarebbe definita da una persona che non sa nulla del funzionamento interno di un sito web.

  • Ad esempio, un elenco di prodotti e i dettagli di un prodotto sono logicamente due pagine, quindi troverai due viste.

    Internamente, potrebbe corrispondere a una singola richiesta AJAX che recupera tutte le informazioni su tutti i prodotti. Oppure, per visualizzare i dettagli di un prodotto, potresti fare una dozzina di richieste AJAX a diverse API. Ciò che conta è che le persone non tecniche lo vedano come una pagina che mostra un elenco di prodotti e una pagina che mostra i dettagli.

  • D'altra parte, un elenco di prodotti ordinati per un prezzo e un elenco di prodotti ordinati con un nome si sentono più come una singola pagina e probabilmente corrispondono a una singola vista.

Dato che la nozione di pagine non è di per sé molto precisa, potresti anche essere guidata da quanti cambiamenti ci sono tra due visualizzazioni:

  • Se due visualizzazioni non condividono più di un'intestazione e di un piè di pagina, è probabile che debbano rimanere separati.

  • Se due viste sono praticamente un copia-incolla con una parte minuscola diversa, devono essere unite in un'unica vista con un'istruzione if/else .

  • Nel frattempo, la scelta rimane piuttosto soggettiva.

Si noti che avere due diverse viste non porta necessariamente alla duplicazione del codice (o piuttosto alla duplicazione del markup in questo caso). La maggior parte dei motori di visualizzazione / modello ha:

  • Viste principali, che consentono a un determinato modello di ereditare da un modello principale che contiene la marcatura circostante,

  • Visualizzazioni parziali, che consentono a un determinato modello di incorporare il markup da un altro modello, markup che può essere così condiviso tra più viste.

risposta data 19.01.2015 - 12:05
fonte
1

Non ho mai usato Laravel, quindi non sono sicuro al 100% che funzioni per te, ma un metodo che ho usato in passato è includere un elenco o un valore opzionale nel mio viewmodel che contiene il nome di un altro modello da rendere e i dati da inserire. La vista quindi esegue l'iterazione sull'elenco / verifica la presenza del valore e include la definizione di vista appropriata.

    
risposta data 19.01.2015 - 10:25
fonte

Leggi altre domande sui tag