Qual è la differenza tra il modello di progettazione MVC, MVP e MVVM in termini di codifica c #

Se cerchiamo Google utilizzando la frase “Qual è la differenza tra il modello di progettazione MVC, MVP e MVVM”, potremmo ottenere pochi URL che discutono la differenza tra il modello di progettazione MVC MVP e MVVM in modo teorico come :

MVP

Utilizzare in situazioni in cui l’associazione tramite un datacontext non è ansible. Windows Forms è un perfetto esempio di questo. Per separare la vista dal modello, è necessario un relatore. Poiché la vista non può legarsi direttamente al presentatore, le informazioni devono essere passate alla vista tramite un’interfaccia (IView).

MVVM

Utilizzare in situazioni in cui è ansible eseguire il binding tramite un datacontext. Perché? Le varie interfacce IView per ogni vista vengono rimosse, il che significa meno codice da mantenere. Alcuni esempi in cui MVVM è ansible includono progetti WPF e javascript che utilizzano Knockout.

MVC

Utilizzare in situazioni in cui la connessione tra la vista e il resto del programma non è sempre disponibile (e non è ansible utilizzare efficacemente MVVM o MVP). Descrive chiaramente la situazione in cui un’API Web è separata dai dati inviati ai browser client. ASP.NET MVC di Microsoft è un ottimo strumento per gestire tali situazioni e fornisce un framework MVC molto chiaro


Ma non ho trovato un singolo articolo che discuti teoricamente la differenza insieme al codice di esempio.

Sarebbe davvero bello se ricevessi un articolo che discutesse la differenza tra questi 3 modelli di design (MVC, MVP e MVVM) insieme al codice.

Mi piacerebbe mettere le mani sul codice sorgente di 3 app CRUD simili che sono state implementate da questi tre modelli di design (MVC, MVP e MVVM). In modo che io possa passare attraverso il codice e capire come si dovrebbe scrivere il codice per questi tre design patter (MVC, MVP e MVVM).

Quindi, se esiste un articolo di questo tipo che discuti di come il codice sembrerebbe diverso per questi 3 modelli di progettazione (MVC, MVP e MVVM), allora ti preghiamo di reindirmi a tale articolo.

Questo dovrebbe essere un buon antipasto. In realtà, la tua “piattaforma” prescelta svolge anche un ruolo importante nel modo in cui utilizzi questi modelli. Ad esempio, MVVM è naturalmente adatto a WPF, mentre MVP funziona bene con Windows Form. ASP.Net MVC parla da solo.

Alcune differenze di base possono essere scritte in breve:

MVC:

MVC tradizionale è dove c’è un

  1. Modello: funziona come modello per i dati
  2. Visualizza: tratta la vista dell’utente che può essere l’interfaccia utente
  3. Controller: controlla l’interazione tra Modello e Vista, in cui la vista chiama il controller per aggiornare il modello. La vista può chiamare più controller se necessario.

MVP:

Simile al MVC tradizionale ma Controller è sostituito da Presenter. Ma il Presenter, diversamente da Controller, è responsabile anche della modifica della vista. La vista di solito non chiama il presentatore.

MVVM

La differenza qui è la presenza di View Model. È una specie di implementazione di Observer Design Pattern, in cui anche le modifiche nel modello sono rappresentate nella vista dalla VM. Ad esempio: se viene modificato un cursore, non solo viene aggiornato il modello, ma anche i dati che possono essere un testo, che viene visualizzato nella vista, vengono aggiornati. Quindi esiste un collegamento dati bidirezionale.

Grande spiegazione dal link: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Diamo prima un’occhiata a MVC

L’input è diretto prima al Controller, non alla vista. Tale input potrebbe provenire da un utente che interagisce con una pagina, ma potrebbe anche essere semplicemente inserire un URL specifico in un browser. In entrambi i casi, è un controller a cui è ansible interfacciare per dare il via ad alcune funzionalità.

Esiste una relazione molti-a-uno tra il controller e la vista. Questo perché un singolo controller può selezionare diverse visualizzazioni da rendere in base all’operazione che viene eseguita.

C’è una freccia a senso unico da Controller a Vista. Questo perché la vista non ha alcuna conoscenza o riferimento al controller.

Il Controller rinvia il Modello, quindi è presente la conoscenza tra la Visualizzazione e il Modello previsto, ma non il Controller che lo serve.

MVP – Model View Presenter

Ora diamo un’occhiata al pattern MVP. Sembra molto simile a MVC, fatta eccezione per alcune distinzioni chiave:

L’input inizia con View, non con Presenter.

Esiste una mapping uno-a-uno tra la vista e il relatore associato.

La vista contiene un riferimento al presentatore. Anche Presenter reagisce agli eventi triggersti ​​dalla vista, quindi è a conoscenza della vista a cui è associato.

Il relatore aggiorna la vista in base alle azioni richieste che esegue sul modello, ma la vista non è a conoscenza del modello.

MVVM – Model View Visualizza modello

Quindi, con gli schemi MVC e MVP davanti a noi, diamo un’occhiata al pattern MVVM e vediamo quali differenze detiene:

L’input inizia con la vista, non con il modello di vista.

Mentre la vista contiene un riferimento al modello di vista, il modello di vista non ha informazioni sulla vista. Questo è il motivo per cui è ansible avere una mapping uno-a-molti tra varie viste e un modello di vista … anche attraverso le tecnologie. Ad esempio, una vista WPF e una vista Silverlight potrebbero condividere lo stesso modello di vista.

MVC, MVP, MVVM

MVC (vecchio)

MVP (più modulare a causa del suo basso accoppiamento. Presenter è un mediatore tra View e Model)

MVVM (hai già un legame bidirezionale tra VM e componente UI, quindi è più automatizzato di MVP) inserisci la descrizione dell'immagine qui

Un’altra immagine: inserisci la descrizione dell'immagine qui