Qual è la differenza tra il controller in MVC e ViewModel in MVVM?


21

Non riesco a vedere chiaramente la differenza tra MVC e MVVM. Sento che il comando in un ViewModel è proprio come il metodo di azione in un controller. E sia il Controller che ViewModel notificheranno alla Vista di aggiornarsi dopo aver modificato lo stato del Modello tramite Data Binding. Qual è la differenza principale tra i due modelli?

Risposte:


25

Il controller e il ViewModel differiscono in vari modi.

In MVC il controller conosce la vista, può cambiare la vista. Conosce anche il modello e può chiamarlo. In MVVM un ViewModel è una rappresentazione astratta della vista e non conosce l'interfaccia utente concreta, avvolge il modello in modo da poterlo visualizzare come desiderato.

Nel MVC classico, un controller è solo una strategia della vista per interagire con il modello. In effetti, a volte un controller non è nemmeno necessario. In MVVM non è necessario, poiché è possibile avere diversi ViewModel per la stessa vista se sono necessari comportamenti diversi. In MVC potresti avere ad esempio un ReadOnlyController o un AdminController per comunicare con il modello. In MVVM potresti avere solo due ViewModel e scegliere quello che ti serve per la View.

Ma hanno alcune somiglianze. In entrambi i modelli, la vista è un osservatore . Nel MVC classico, la vista è un osservatore del modello, in MVVM è un osservatore del ViewModel.

Entrambi i modelli hanno lo scopo di fornire una separazione delle preoccupazioni. MVVM mira principalmente a fornire un'astrazione della vista, completamente indipendente dalla tecnologia dell'interfaccia utente in uso. MVC non va così lontano. L'obiettivo principale è la separazione delle preoccupazioni, in modo da non mettere in risalto la logica aziendale (il Modello).

Potresti anche trovare utile questa mia risposta a una domanda simile.

Alla fine, dovrei dire che entrambi i modelli appartengono alla stessa famiglia. MVP, di cui MVVM è un discendente è un fratello di MVC. Se vuoi saperne di più segui questo link al sito Web di Martin Fowler , spiega tutto in dettaglio.


non pensi che queste architetture di vista dei modelli siano meglio comprese dalle persone che le implementano. Credo che sia una questione di scelta per lo sviluppatore. Uno sceglie MVC o MVVM a seconda che desideri un'astrazione totale sulla vista con un po 'di costi generali (nel caso di MVVM).
Pankaj Upadhyay,

@Pankaj Upadhyay: quale utilizzare dipende dalle tue esigenze e dalla scelta della tecnologia e anche dalle idiosincrasie della tua piattaforma.
Falcon,

Credo che l'architettura MVC sia abbastanza buona per qualsiasi cosa, ma ciò potrebbe essere dovuto al fatto che non ho affrontato un problema che richiedeva particolarmente MVVM. IMO, devi sicuramente avere un po 'di controllo sulla vista perché renderla completamente libera migliorerà più errori nei futuri aggiornamenti
Pankaj Upadhyay,

1
@Pankaj Upadhyay: se si desidera utilizzare la stessa logica per varie tecnologie di interfaccia utente, MVP è superiore. Non penso che tu abbia necessariamente bisogno di un certo controllo sulla vista. Può essere totalmente indipendente e puoi anche testare i ViewModels - se non meglio. La migliore separazione è vantaggiosa anche per i progettisti in quanto il lavoro sul progetto può essere suddiviso meglio.
Falcon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.