Il controller deve passare i dati a una vista nel pattern MVC?

10

Lavoro con ASP.NET MVC (e altre implementazioni MVC basate sul Web) abbastanza spesso, ma questo è qualcosa di cui non sono mai stato sicuro: il controller e la vista dovrebbero comunicare?

Ovviamente il controllore dovrebbe scegliere quale vista usare, ma cosa dovrei dire se il controller passasse i dati alla vista? Secondo me, se la vista è in attesa di dati dal controller, allora sono effettivamente legati insieme come una coppia (controller, vista). Invece, di solito la vista comunica con il modello stesso ed è indipendente da qualsiasi controller.

Ho il giusto approccio, o è il caso che non ci sia una risposta corretta? La risposta cambia quando si lavora nel web rispetto ad altri ambienti? La risposta cambia quando hai il concetto di una vista strongmente tipizzata (come in ASP.NET MVC) o no?

    
posta Andy Hunt 11.02.2012 - 17:19
fonte

2 risposte

6

Il controller prepara i dati che verranno ulteriormente passati alla vista per il rendering / visualizzazione. Accetta inoltre i dati di input dell'utente tramite un meccanismo di pubblicazione-sottoscrizione o simile. Controlla il primo diagramma su Wikipedia o sito Web di Martin Fowler per ulteriori informazioni su MVC.

if the view is expecting data from the controller, then they're effectively tied together as a (controller, view) pair.

Mentre una vista generalmente accetta i dati, nella maggior parte dei framework MVC, non dipende da specifici controller. Le eccezioni sono, ad esempio, la famiglia JavaServer Faces. In generale, framework come Rails, Django o Spring MVC consentono di disaccoppiare le viste dai controller passando i dati (il contesto, comunemente una mappa / dizionario / borsa) a una vista (dove una vista è un'implementazione di modello di visualizzazione del modello ).

Does the answer change when you have the concept of a strongly-typed view (like in ASP.NET MVC) or not?

Indipendentemente dal fatto che il tuo linguaggio di programmazione sia tipizzato o meno, non ha alcuna influenza sul modo in cui stai organizzando la tua applicazione.

    
risposta data 11.02.2012 - 18:12
fonte
1

La domanda che stai sollevando viene discussa di tanto in tanto nel mio team. Discutiamo di due approcci, entrambi con i loro pro e contro.

Il primo, sostiene che il controllore può aggiornare la vista con il seguente schema. Ascolta sia la GUI che gli eventi del modello. Quando si verifica un evento GUI, esegue l'azione richiesta nel modello, che a sua volta spara ed evento. Ora il controller di solito aggiorna la vista con i dati richiesti.

Il secondo approccio, sostiene che la vista stessa sta ascoltando gli eventi del modello e si aggiorna con i dati che sono collegati all'evento o interrogando il modello.

Nel primo approccio hai più potere al controller che controlla veramente tutto ciò che sta succedendo alla tua applicazione. Il potere di decidere in che modo la vista dovrebbe essere aggiornata in base a quale evento è nelle sue mani e in questo modo stai mantenendo la tua visione pura. Tuttavia, come hai detto, in questo modo hai la tua vista e il controller accoppiati.

Nel secondo li stai disaccoppiando, ma la tua vista in realtà sta controllando se stessa in qualche modo.

    
risposta data 11.02.2012 - 20:29
fonte

Leggi altre domande sui tag