MVVM o MVC? Desideri utilizzare lo stesso set di classi per WPF e ASP.NET


10

Sono un principiante in termini di design pattern. Ho appena iniziato a studiare MVC quando sento un nuovo ronzio, MVVM.

Voglio imparare le intuizioni di entrambi, riprogettando un vecchio inventario e un'applicazione di fatturazione che ho sviluppato per un cliente. Voglio scrivere sia un'applicazione WPF basata su Windows sia una versione basata sul Web. Voglio usare lo stesso insieme di classi se possibile, in caso contrario, almeno con poche modifiche.

Ho letto un paio di articoli, ma non sto seguendo l'architettura e i concetti di alto livello di .NET 3.5 e 4 discussi qui. Voglio muovermi passo dopo passo progettando solo ciò di cui ho veramente bisogno nel mio progetto di vita reale.

Esiste un semplice riferimento passo-passo a MVVM? MVVM è un super-set o un sotto-set di MVC? Quale modello è moderno e quale dovrei scegliere per le versioni Windows e Web della mia applicazione?

Ci sono alcune classi che raramente ho bisogno di connettermi con la vista. In tal caso, progettare la stessa classe in modo MVVM si rivelerà un lavoro aggiuntivo.

Risposte:


10

Esiste un semplice riferimento passo-passo a MVVM?

Si C'è. Dai un'occhiata a qui.

MVVM è un super-set o un sotto-set di MVC?

MVVM appartiene alla famiglia MVC, quindi, se puoi dirlo, è un sottoinsieme. È una variante per separare l'interfaccia utente dalla logica aziendale sottostante. Lo descriverei come un fratello di MVC. Sin dai primi giorni di OOP, le persone hanno cercato modi per separare l'interfaccia utente dalla loro logica. MVC è stato il primo archetipo che si è evoluto. È piuttosto semplice, anche se la maggior parte delle persone non capisce bene. La vista è solo un osservatore del modello e lo chiama quando necessario. Il controller è solo una strategia per consentire alla vista di comunicare con il modello, ad esempio quando è necessario un comportamento intercambiabile (ad esempio ReadonlyController, AdminController). MVC ha molto successo ed è davvero una buona pratica applicarlo.

MVVM è un tipo specializzato di pattern MVP, come descritto da Martin Fowler . MVP cerca di mantenere la vista il più stupida possibile (pur mantenendo l'input dell'utente ecc.), Migliorando così la testabilità. Mira a un'astrazione della vista e della logica di interazione che deve essere inserita nel presentatore. Il relatore comunica esclusivamente con il modello / la logica aziendale e aggiorna la vista. Martin Fowler descrive MVVM praticamente nel suo modello di modello di presentazione.

La vista è completamente astratta in un ViewModel. Quando ha Viewbisogno di una proprietà, anche quella ViewModeldeve averla. (ViewModel) è pensato per essere completamente indipendente dalla tecnologia UI sottostante, un'astrazione. Per comunicare tra View e ViewModel, è necessario utilizzare un modello di sincronizzazione (ad esempio Observer). Questo non è facile da realizzare in un ambiente web senza stato. MVVM differisce da MVP, poiché View non si lega più al modello / logica aziendale ma a un ViewModel.

Quale modello è moderno e quale dovrei scegliere per le versioni Windows e Web della mia applicazione?

Il modello di presentazione (simile a MVVM) in teoria dovrebbe essere completamente indipendente dalla tecnologia UI in uso. Tuttavia, l'aspetto della sincronizzazione deve essere coperto. Può essere fatto facilmente legando a Comandi e Proprietà con WPF, dove la colla di sincronizzazione è già presente. Con ASP.NET, questa è una storia diversa. Tuttavia, c'è un articolo su CodeProject che utilizza il modello di modello di presentazione con tutte le tecnologie dell'interfaccia utente di Windows. Dare un'occhiata.


4

A causa di problemi del ciclo di vita e della necessità di mantenere lo stato tra i post delle pagine, sarà molto difficile riutilizzare il 100% del tuo codice UI nessuno tra web e WPF. Asp.net non ha il potente binding di dati necessario per MVVM, inoltre molta della logica deve essere eseguita in jscript in questi giorni poiché le persone si aspettano che l'interfaccia utente si aggiorni da sola senza la necessità di un postback.

Se potessi usare SilverLight la tua vita sarebbe molto meno complessa :-)

Allo stesso modo puoi ospitare un browser web nella tua app WPF per i bit comuni dell'interfaccia utente?


Quali vantaggi posso ottenere con SilverLight?
RPK,

1
@PRK, Silverlight ti consentirà principalmente di fare tutto ciò che fa WPF e se riesci a far installare tutti i tuoi utenti "web", ti permetterà anche di creare una soluzione a cui si accede var il web e "si sente" come un'app web.
Ian,

4

L'intenzione di utilizzare le stesse classi per l'interfaccia utente basata su ASP.Net e WPF non è molto pratica. Il databinding e l'uso di javascript sul web è molto diverso da WPF. L'unica opzione che mi viene in mente è MVP con vista completamente passiva . In teoria puoi avere lo stesso presentatore che popola una pagina Web e WPF.
In pratica, svilupperò un'architettura in cui la maggior parte delle regole aziendali è in un livello di servizio Web e due diversi livelli di presentazione con il minor numero possibile di regole aziendali che dialogano con questo servizio Web.

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.