2012-01-14 12 views
9

Vogliamo iniziare a sviluppare un software desktop intermedio. Abbiamo deciso di utilizzare il WPF. Non vogliamo utilizzare il pattern MVVM. Perché non conosciamo MVVM e abbiamo anche limiti di tempo. È vero sviluppare un'applicazione WPF senza pattern MVVM (usando l'architettura a 3 livelli ma senza MVVM) Anche se ha prestazioni migliori di quelle di vincere ancora?Sviluppo software WPF senza MVVM

+1

Le applicazioni WPF * sono * applicazioni Windows, se si intende * moduli di vittoria * è necessario scrivere ... –

+1

No, WPF è ancora molto più lento di WinForms. Il modello di progettazione è irrilevante a questo. –

+5

senza alcuni MVVM aiuta il tuo XAML a diventare un casino molto molto veloce ... –

risposta

13

Non è necessario fare affidamento su MVVM quando si utilizza wpf. In realtà le chiavi utilizzando WPF correttamente sono: comandi

  • uso invece di eventi (si potrebbe fare questo senza rendersene conto, ma accertarsi)
  • Utilizzare l'associazione di dati invece di ottenere valori di fuori dei controlli direttamente
  • impostare il contesto dei dati e si legano a che, invece di legarsi al codice dietro

MVVM funziona molto bene per queste due cose, ma non è necessario. Nello specifico, MVVM richiede una rigorosa separazione a 3 livelli di problemi che può essere eseguita altrettanto facilmente con MVP.

Per quanto riguarda le prestazioni, ciò dipende in realtà dalla piattaforma su cui viene eseguita l'app e dallo stile di codifica. Se lo si esegue su un computer senza una scheda grafica decente, WinForms probabilmente funzionerà meglio perché wpf probabilmente tornerà al rendering del software che sarà molto lento. Se hai bisogno di fare grafica 3d allora wpf è davvero la tua unica opzione.

Someone else's recommendation to NOT use MVVM.

A codeproject example of how to do MVP with wpf

+0

In realtà è più simile a: utilizzare [comandi] (http://msdn.microsoft.com/en-us/library/ms752308.aspx) anziché la gestione degli eventi e l'associazione dei dati anziché l'aggiornamento imperativo. –

+0

@ H.B. I comandi sono buoni, ma sono eccessivi per la maggior parte di ciò che faccio. Inoltre, l'associazione dei dati sostituisce la gestione degli eventi sera se si esegue tutto ciò che non è l'associazione dei dati tramite i comandi. – mydogisbox

+0

@ H.B. Hmmm, lo riprendo. Io uso il binding con i comandi indirizzati. Non sei sicuro del motivo per cui stai opponendo vincoli e comandi. – mydogisbox

2

Sicuramente non devi fare affidamento su MVVM quando utilizzi WPF/Silverlight.

Per quanto riguarda la differenza di prestazioni, potrebbe dipendere dallo stile della codifica, tuttavia, se eseguita correttamente, la differenza non dovrebbe essere evidente.

+1

Concordato, il rispetto del pattern MVVM non porta automaticamente ad una buona architettura dell'applicazione (sebbene sia di aiuto), né l'utilizzo di questo impedisce di creare applicazioni carine. Ci sono tuttavia un paio di concetti chiave in WPF con cui dovresti familiarizzare prima di iniziare la codifica, in particolare l'associazione dei dati. Ottieni un'introduzione completa nel [MSDN] (http://msdn.microsoft.com/en-us/library/aa970268.aspx). – Clemens

-3

Non v'è alcun obbligo di utilizzare MVVM. Si può usare il visual designer per trascinare i controlli n 'drop sulla superficie del progetto. Fare doppio clic su un pulsante e ottenere un gestore di eventi nel code-behind. Non dimentichiamo le proprietà di impostazione delle proprietà & tramite il PropertyGrid. Tutto esattamente come fatto in Winforms.

Senza un collegamento dati DataContext non funziona. Se si desidera utilizzare il collegamento dati, i primi esempi che ho visto impostano il DataContext della finestra = this; nel costruttore. In questo caso, la finestra agisce come "ViewModel".

È anche possibile utilizzare MVVM con View-First. Nessun DI o IoC richiesto.

public class MyViewModel 
{ 
} 
public class MyWindow 
{ 
    public MyWindow() 
    { 
     DataContext = new MyViewModel(); 
    } 
} 

Naturalmente il passaggio successivo è l'implementazione di DI/IoC utilizzando Unity.

+0

È possibile utilizzare l'associazione dati senza impostare la proprietà 'DataContext', è sufficiente specificare la relativa sorgente (ad esempio, denominare la finestra e fare riferimento alla finestra per nome). Inoltre, se hai intenzione di utilizzare gestori di eventi come in winforms, usa solo winforms. Infine, se non hai tutto M - V - VM separato, allora non hai MVVM, hai qualcos'altro. – mydogisbox

2

È possibile sviluppare qualsiasi applicazione da WinForm e WPF senza Pattern di progettazione o Pattern di applicazione.

0

MVVM non è necessario ma risolve alcuni problemi comuni con la logica di presentazione. Ad esempio, considerare la proprietà IsBusy ViewModel.Viene impostato da qualsiasi operazione che ha una durata e può essere utilizzato da Command.CanExecute per segnalare i controlli associati per disabilitare se stessi quando qualcosa è in esecuzione. Una proprietà per la manipolazione logica e dell'interfaccia utente. Puoi pensare ad altri esempi come questo che ti guideranno verso MVVM. È quello che offre l'associazione che conta, non il modello stesso.