MVVM o MVC? Vuoi 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 l'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, se non lo sono, quindi 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 amp; 4 discusso lì. Voglio procedere passo passo disegnando solo ciò di cui ho veramente bisogno nel mio progetto di vita reale.

C'è un semplice riferimento passo-passo a MVVM? MVVM è un super-set o un sottoinsieme di MVC? Quale modello è moderno e quale dovrei scegliere per Windows & Versioni web della mia applicazione?

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

    
posta RPK 20.07.2011 - 10:08
fonte

3 risposte

10

Is there any easy step-by-step reference to MVVM?

Sì, c'è. Dai un'occhiata qui.

Is MVVM a super-set or a sub-set of MVC?

MVVM appartiene alla famiglia MVC, quindi, se puoi dirlo, è un sottoinsieme. È una variante per separare l'interfaccia utente dalla logica di business sottostante. Lo descriverei come un fratello di MVC. Sin dagli albori dell'OOP, le persone sono state alla ricerca di modi per separare l'interfaccia utente dalla loro logica. MVC è stato il primo archetipo che si è evoluto. È piuttosto semplice, anche se molte persone non lo fanno bene. La vista è solo un osservatore del modello e lo chiama quando è necessario. Il controller è solo una strategia per la visualizzazione della comunicazione 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 il punto di vista più stupido possibile (mentre continua a prendere input dell'utente, ecc.), Migliorando così la testabilità. Mira ad un'astrazione della vista e alla logica di interazione che deve mettere 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 View ha bisogno di una proprietà, anche ViewModel deve averla. Esso (il ViewModel) è pensato per essere completamente indipendente dalla tecnologia dell'interfaccia utente sottostante, un'astrazione. Per comunicare tra View e ViewModel, è necessario utilizzare un pattern di sincronizzazione (ad esempio Observer). Questo non è facile da realizzare in un ambiente Web senza stato. MVVM differisce da MVP, poiché la vista non si lega più al tuo modello / business logic ma a un ViewModel.

Which pattern is modern and which one should I choose for Windows & Web versions of my application?

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

    
risposta data 20.07.2011 - 12:02
fonte
4

A causa dei problemi del ciclo di vita e della necessità di mantenere lo stato tra i post di una pagina, sarà molto difficile riutilizzare il 100% del codice di interfaccia utente mancante tra Web e WPF. Asp.net non ha il potente binding di dati che è necessario per MVVM, anche molte delle logiche devono essere eseguite in jscript in questi giorni in quanto le persone si aspettano che l'interfaccia utente aggiorni la propria auto 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?

    
risposta data 20.07.2011 - 10:19
fonte
4

L'intenzione di utilizzare le stesse classi per l'interfaccia utente basata su ASP.Net e WPF non è molto pratica. Il database e l'uso di javascript sul web è molto diverso da WPF. L'unica opzione che posso pensare è MVP con visualizzazione 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 si trova in un livello di servizio Web e due livelli di presentazione diversi con il minor numero possibile di regole aziendali che interagiscono con questo servizio Web.

    
risposta data 20.07.2011 - 10:59
fonte

Leggi altre domande sui tag