2009-07-31 10 views
42

Ho letto e sentito da più persone che WPF ha una curva di apprendimento piuttosto ripida (a seconda di quanto sei esperto o esperto). Sembra che la maggior parte delle persone possa far funzionare i progetti dimostrativi o di avviamento, per poi ritrovarsi bloccati per lunghi periodi di tempo su problemi vari. Sono curioso di sapere cosa sia specificamente difficile da imparare o capire (livelli, SDK, XAML, associazione dati, ecc.) E se hai qualche suggerimento su come evitare/alleviare alcuni di questi argomenti difficili?Quanto è grave la curva di apprendimento del WPF?

+0

Hai fatto la lista per SO podcast 61 w/Miguel? Grande episodio ... –

+0

No, non ho dovuto, check-out, grazie! – SwDevMan81

risposta

35

WPF è diverso; non c'è da allontanarsi da quello.

Il mio consiglio principale è non aver paura di XAML; Abbracciarlo, è lì che si trova il potere!

Mi spiego: -

Per me essere produttivo, preferisco scrivere XAML nella vista testo come posso creare il layout nuda della finestra in pochi tasti. Se si digita regolarmente il codice, questo è un modo molto rapido per sviluppare Windows. È quindi possibile utilizzare gli editor visivi per renderlo bello.

Se si tiene a mente che ogni elemento di XAML "new" è quell'oggetto e che ogni attributo di quell'elemento XAML è una proprietà dell'oggetto, è possibile pensare a XAML come creazione di oggetti e assegnazioni di proprietà. Molto simile al codice di scrittura.

Se trascorri troppo tempo nel visual designer, non riesci ad apprezzarlo, e per alcuni questo rallenterà la curva di apprendimento.

Un recente podcast Hanselminutes potrebbe interessarti.

Inoltre, consiglio vivamente di apprendere in anticipo i concetti di Views e View-Models, anche se non si sottoscrive tutto ciò che fa parte di CompositeWPF in quanto ciò aiuta davvero.

+0

In realtà CompositeWPF non si abbona a un singolo modello di GUI come MVVM, MVP, MVC, ecc. Mi sembra di ricordare l'implementazione di riferimento utilizzando MVP. MVVM sembra il più popolare per WPF. –

+2

+1 (e molti altri, se possibile) per il vantaggio di digitare XAML anziché prima di progettarlo. XAML crea gerarchie di oggetti. Gli oggetti sono ciò di cui hai bisogno per imparare a usare WPF. Impara questo e il resto inizia a cadere al suo posto. Bella risposta. – Randolpho

2

Dalle poche persone con cui ho lavorato è stato necessario impararlo, consigliamo vivamente di esaminare tutti i tutorial di Expression Blend. Ciò ha dato loro un buon background su WPF e lo strumento migliore da usare quando si lavora con esso.

2

Se hai esperienza con HTML o XML o lingue basate in modo simile, non è eccezionalmente difficile, specialmente se hai esperienza nel web design. Se vieni rigorosamente da uno sfondo WinForms, la curva di apprendimento è un po 'più ripida. Attualmente sto imparando da solo il WPF e poiché provengo da un ampio background di sviluppo web, non trovo i concetti difficili da padroneggiare per la maggior parte di essi. Ho trovato che i video tutorial online su WindowsClient.net sono eccezionalmente utili, anche se un po 'mal organizzati.

+7

Non sono d'accordo con questo. Conoscere HTML e XML rende sicuramente l'apprendimento di XAML più semplice, ma non ha alcuna relazione con alcuni dei principali concetti di WPF come l'associazione dati, il modello di comando, eventi indirizzati, modelli di controllo e modelli dati, proprietà di dipendenza, storyboard, ecc. – jason

+2

@ Jason: una delle principali difficoltà di WPF è il livello di presentazione, ed è qui che aiuta lo sfondo di Webdesign, IMO. –

8

Ho giocato con .NET per più di 4 anni, principalmente applicazioni Windows Forms. Il binding non è qualcosa di sconosciuto e cerco di usare le buone pratiche in tutte le mie applicazioni in C#. Negli ultimi 1 mesi ho studiato il WPF per il lavoro e devo ammettere che è MOLTO potente ma molto più difficile da realizzare. Puoi fare molto di più e ottenere dei disegni fantastici con meno sforzo ma solo una volta che sai come funziona davvero ed è difficile perché è enorme.

Di più, il debug è più difficile, il che rende anche più lento l'apprendimento. Il problema penso sia l'IDE di Visual Studio che non aiuta molto nello XAML e perdi rapidamente alcune funzionalità di IntelliSense di C# quando esegui binding o altre cose che ora si trovano in un tag XML. Mi piace ma sì, la curva di apprendimento non è liscia.

+2

Questo è esattamente quello che dobbiamo affrontare durante il debug. Non otteniamo alcun errore di compilazione o di esecuzione, ma le cose non funzionano come pensiamo e più frustranti a volte non riusciamo a trovare il perché. Inoltre, se non siamo consapevoli dei problemi, è difficile pubblicare enormi quantità di codice nei forum per ottenere soluzioni. – Marshal

17

C'è un bel articolo di Karsten Januszewski chiamato Hitting the Curve: On WPF and Productivity potreste trovare interessante:

Cerchiamo di essere chiari: WPF viene fornito con una curva . Ora ho visto un gruppo di sviluppatori di colpire quella curva. E la curva è ripida. Stiamo parlando tra da due a due mesi di curva a seconda dello sviluppatore e del livello di esperienza/intuizione dello sviluppatore . Ci saranno momenti di totale mistificazione e un sacco di momenti di illuminazione. È allo stesso tempo doloroso e divertente, se lo sviluppatore si diletta nella scoperta di una piattaforma UI profonda e ben congegnata. È allo stesso tempo familiare e lo straniero . Ci sono molte somiglianze con lo altri paradigmi di sviluppo dell'interfaccia utente: gli stili si sentono come i CSS, beh. XAML codice dietro si sente come ASP.NET, beh sorta di. Il 3D sembra DX o OpenGL, come una specie di. Gli eventi instradati si sentono come gli eventi .NET , ben organizzati. Proprietà Dipendenti come proprietà, bene sorta di. L'elenco potrebbe continuare. Ma metafore ci sono così tante idee aliene che devono essere padroneggiate: controllo template, storyboard, databinding vengono in mente immediatamente. Non è una curva banale e non aspettano di essere produttivi al giorno 1 o addirittura settimana 1 mese o addirittura 1.

E 'valsa la pena però! ;)

+0

Per esperienza personale, sono d'accordo con il periodo di tempo di 2 settimane-2 mesi. –

3

Sarà una di quelle risposte "dipende", ma tutto ciò che è in realtà è il dipende se sei il tipo di sviluppatore che cerca di migliorare continuamente le tue abilità. Se è così, alla fine si arriva a un paio di cose.

Acquista WPF Unleashed (altri libri sono disponibili ma ne consiglio vivamente tutto questo), analizza gli esempi e in circa 2 mesi circa ti chiederai come mai hai fatto le cose senza.

Non è scienza missilistica e non ci sono concetti di cambiamento di paradigma da affrontare. Infatti, se sei abituato a mantenere una buona separazione tra la tua logica e la presentazione, dovrebbe adattarsi perfettamente.

Per raggiungere un livello di maestria probabilmente stai cercando tra i 6 ei 12 mesi di gioco con esso.

Buona fortuna.

5

Può essere piuttosto ripido.

Ho passato la maggior parte del mese a sperimentare con WPF e scrivere un modello del nostro prodotto attuale senza sviluppare un'intuizione per il suo modello di associazione o anche solo immaginare come Microsoft vuole utilizzarlo. Mi ci è voluto molto meno tempo per cogliere le basi di ASP.NET MVC.

[La nostra applicazione visualizza/dipende da molti dati in tempo reale e ho utilizzato il libro di Windows Presentation Foundation di Nathan. Forse un altro libro sarebbe stato più appropriato.]

5

WPF è facile una volta ottenuta l'idea generale di come funziona: prova "WPF - how and why". Il problema più grande sta funzionando se ne vale la pena e ci sono ancora molte applicazioni che potrebbero essere implementate come Windows Form e un po 'di grafica.

Sarei anche d'accordo con il commento precedente su come entrare in XAML - è proprio come un HTML leggermente più sofisticato e l'unica vera difficoltà è scoprire cosa fa cosa. Per rimanere bloccato più avanti in un progetto, non si rimane sempre bloccati più avanti in un progetto? È quando inizi a provare a fare l'1% che è difficile.

3

Sì, non è una passeggiata facile, ma non aver paura. La cosa su WPF, è splendidamente progettata in modo da ottenere un feedback emotivo positivo costante (almeno lo ho fatto) quando lo si apprende. Ti piace giocare con esso ed esclamare "WOW" ogni pochi minuti;)

+1

"feedback emotivo positivo costante". lol. – gonzobrains

+0

@gonzobrains che cosa divertente? falso? –

10

La difficoltà con l'apprendimento di WPF non è tanto l'API quanto il modello. È un modello mentale molto diverso da quello che useresti con qualcosa come Windows Forms.

Piuttosto che scrivere metodi che popolano imperativamente un elemento dell'interfaccia utente, generalmente i dati si associano alle proprietà su un oggetto. Per ottenere un comportamento complesso, generalmente usi un certo livello di composizione.

Ad esempio, se si dispone di una serie di elementi desiderati in un elenco, con una parte di testo seguita da un'immagine. In Windows Form, otterresti l'elenco e lo itererai. Per ogni elemento dell'elenco, devi creare il controllo per l'elemento e il testo e aggiungere l'immagine, quindi aggiungere il nuovo controllo secondario all'elenco. (La procedura esatta può variare in base al tipo di controllo. È possibile aggiungere sottotitoli anziché eseguire solo un controllo, ecc.).

WPF gestirà questo in modo molto diverso. In WPF, al livello più alto, dichiareresti un oggetto contenitore e lo associ all'elenco.

Si dovrebbe quindi fornire a quel contenitore un modello da utilizzare per visualizzarne gli elementi. Il modello è fondamentalmente un altro controllo, che definisce il posizionamento dei sottoelementi, che sono legati da un'istanza della classe con cui viene compilata la lista.

Finisce con un tocco molto compositivo ed è assurdamente potente. È anche un modello molto diverso rispetto a quello a cui la maggior parte degli sviluppatori è abituato, e finché non è possibile interiorizzare il modello è molto comune imbattersi in problemi che cercano di fare le cose come in Windows Form/etc.

Una volta abituati al modello, tornare alle altre API è doloroso. Non perché siano improvvisamente duri, ma perché sai come possono essere le cose facili.

8

Come potreste essere in grado di dedurre dalla mia storia di domande, ho sicuramente trovato una curva di apprendimento ripida. Descrivi la mia esperienza quasi esattamente. Essendo uno studente a tempo pieno (in matematica e fisica, non in ingegneria del software) che fa solo programmazione WPF per applicazioni hobbistiche, è stato piuttosto frustrante. Ho provato a creare nuove applicazioni in WPF o a trasferire alcune delle mie vecchie applicazioni su WPF, rimanendo sempre bloccato su qualche piccola cosa che sembra eccessivamente difficile. Una cosa che non ho fatto --- fondamentalmente a causa di problemi di tempo --- è sederti ad es. un libro o una serie di tutorial e seguiteli passo dopo passo. Se sei uno sviluppatore professionista, potrebbe essere molto più fattibile e potrebbe rendere WPF molto più semplice per te.

La cosa più grande che mi dà problemi, penso, sta prendendo spunto dal paradigma Model-View-ViewModel (vedi ad esempio this question of mine).Mentre in WinForms potevo semplicemente trascinare e rilasciare alcune cose su un modulo, fare confusione con le sue proprietà e collegare alcuni eventi nel codebehind, ora devo pensare al partizionamento delle cose in vista, modello e viewmodel. Molti di quegli eventi di codebehind diventano regole di validazione o roba databinding. Probabilmente non aiuta che nessuna delle mie applicazioni sia realmente un'applicazione di "manipolazione dei dati"; cioè, non manipolano un database di informazioni sui clienti o altro, dove molto avrebbe senso. Invece è più come "Voglio una casella di testo in cui l'utente inserisce un URI e voglio che il pulsante che dice 'Download' sia abilitato solo se quella casella di testo contiene un URI valido." Piccole cose come quelle cominciano a diventare davvero piuttosto complicate; Devo riflettere su dove l'URI si adatta al mio modello, dove si adatta al mio viewmodel, collegare un framework di convalida e le proprietà di database del pulsante e della casella di testo a tutti questi elementi.

Un altro problema fastidioso è quante cose mancano semplicemente nel framework. Ad esempio, sorting listviews.

Alla fine, però, WPF ha molti vantaggi. The layout framework seems a lot nicer than the primarily pixel-based WinForms model. Usa caratteri moderni come l'interfaccia utente di Segoe, heh: P. E le sue funzionalità di compositing sono davvero fantastiche, ad es. quanto è naturale mettere un'immagine su un pulsante (basta mettere un tag XAML dell'immagine all'interno del tag XAML del pulsante, in sostanza); Sospetto che possa risolvere anche lo my problem regarding checkboxes with controls inside of them, anche se non ho ancora provato a farlo.

+4

Il modo migliore per superare lo switch model/view/viewmodel è pensare in termini di "quali dati voglio presentare?" Crea una classe che espone quei dati, hai fatto il viewmodel fatto. In WPF, è quasi sempre meglio pensare in termini di "presentazione dei dati" piuttosto che "popolamento dei controlli". – kyoryu

Problemi correlati