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

20

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 associazione dati. Qual è la principale differenza tra i due modelli?

    
posta TomCaps 31.08.2011 - 09:03
fonte

1 risposta

24

Il controller e il ViewModel si differenziano in vari modi.

In MVC il controller conosce la vista, può cambiare la vista. Conosce anche il modello e può chiamarlo. In MVVM, ViewModel è una rappresentazione astratta della vista e non conosce l'interfaccia utente concreta, ma avvolge il modello in modo che possa essere visualizzato come desiderato.

Nel classico MVC, un controller è solo una strategia della Vista per interagire con il Modello. In effetti, a volte un controller non è nemmeno necessario. In MVVM non ne hai bisogno, poiché puoi avere diversi ViewModel per la stessa vista se hai bisogno di comportamenti diversi. In MVC potresti avere ad esempio un ReadOnlyController o un AdminController per comunicare con il Modello. In MVVM potresti avere solo due ViewModels e scegli quello che ti serve per la Vista.

Ma hanno alcune somiglianze. In entrambi i modelli, la vista è un osservatore . Nel classico MVC, 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 del View, completamente indipendente dalla tecnologia UI in uso. MVC non arriva così lontano. L'obiettivo principale è la separazione delle preoccupazioni, in modo da non mettere la logica aziendale (il modello) nella vista.

Potresti trovare questo rispondi alla mia a una domanda simile utile.

Infine, 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 , che spiega dettagliatamente.

    
risposta data 31.08.2011 - 09:58
fonte

Leggi altre domande sui tag