Va bene per una vista MVC richiedere dati da altre fonti oltre al modello?

4

Sto lavorando in ASP.NET MVC, ma questa domanda è praticamente applicabile a qualsiasi framework MVC (e forse anche ad altri).

In una tipica applicazione MVC arriva una richiesta al controller, che quindi prepara un oggetto modello e quindi chiama la vista, passando l'oggetto modello come parametro. La vista utilizza quindi i dati nel modello per generare una risposta alla richiesta originale. Qualsiasi dato nell'oggetto modello w può essere liberamente utilizzato dalla vista, ma mi chiedo - è OK per una vista richiedere dati da un'altra parte, come una chiamata diretta a un servizio o qualcosa del genere?

Al primo momento la risposta sembra essere un chiaro "no, perché avresti bisogno di questo? Basta aggiungere tutto ciò che la vista ha bisogno per l'oggetto del modello". Ma sono arrivato a questa domanda mentre lavoravo a un progetto pratico, quindi ecco la mia situazione che mi mette in dubbio:

La vista necessita di molti dati per poter essere visualizzata. In particolare, vi sono i dati dei campi modulo effettivi e anche i dati per tutti i menu a discesa presenti nel modulo (elenchi di valori potenziali per campi diversi).

D'altra parte, nel mio progetto le viste sono modificabili. Cioè, diversi clienti (i nostri clienti, che hanno acquistato il nostro sito Web e lo utilizzano nella loro attività) avranno le visualizzazioni personalizzate per soddisfare le loro esigenze. Diversi clienti hanno bisogno di campi diversi visualizzati, e a volte anche le origini dati per lo stesso menu a discesa possono differire significativamente.

Un modo possibile sarebbe quello di interrogare tutti i dati possibili su ogni richiesta e aggiungerli tutti all'oggetto del modello. Ma ci sarà una penalità significativa per questo. Meglio se sono stati interrogati solo i dati necessari, tuttavia il controllore non sa di cosa avrà bisogno la vista.

Quindi vedo 2 opzioni:

  1. Consenti alla vista di chiamare le funzioni esterne che restituiscono gli elenchi di valori per i menu a discesa;
  2. Nell'oggetto modello, aggiungi delegati (o in realtà aggiungi metodi all'oggetto modello) che eseguiranno la query quando la vista glielo chiederà.

Nessun approccio sembra molto elegante per me. Ci sono altre alternative, o se no, qual è la migliore e perché?

    
posta Vilx- 25.03.2015 - 00:16
fonte

2 risposte

4

Ottieni i dati esterni nel metodo del controller, e passa i dati alla vista lì.

Se hai bisogno di più finezza, scrivi un repository, un livello di servizio o un contesto dati che contenga i metodi di recupero dei dati necessari.

Qualsiasi personalizzazione o cambio di visualizzazione può anche avvenire nel controller, usando gli oggetti helper oi metodi secondo necessità.

La visualizzazione dovrebbe essere solo il più intelligente necessario per visualizzare i dati. Se la vista deve ottenere dati in tempo reale, può farlo chiamando un metodo di controllo tramite AJAX.

    
risposta data 25.03.2015 - 00:53
fonte
1

OK, immagino di aver trovato la risposta alla mia domanda. Se voglio percorrere questa strada, ho bisogno di fornire meta-informazioni insieme al tema selezionato. I controllori possono quindi esaminare questa meta-informazione per regolare il proprio comportamento.

    
risposta data 25.03.2015 - 09:39
fonte

Leggi altre domande sui tag