Nel weekend ho finito le demo dell'imminente workshop UGIdotNET del 20 Maggio. Nella demo della discovery di WCF4 ho costruito per la parte client una Console e poi una micro applicazione WPF per mostrare meglio i risultati.
Come d'abitudine sono partito impostando il progetto con MVVM e ho cercato di non esagerare per lasciare l'esempio il più pulito possibile.
Da un punto di vista manutentivo ci sono riuscito, questo è il beneficio di MVVM, e la potenza di WPF mi ha permesso di visualizzare le informazioni nel modo che mi è sembrato più chiaro.
Dal punto di vista di "comunicazione" dei concetti base è un fallimento totale. Ci sono 14 file tra sorgenti e xaml, e se mai dovessi spiegare tutto il giro partirebbe mezza sessione.
Certo questo è uno di quei casi in cui MVVM può essere sacrificato. È solo un esempio che ha lo scopo di essere immediato da capire e non di essere una best practice. Sono sempre stato contrario a mostrare negli esempi di "tecnologia" la cura che andrebbe nel codice di produzione proprio perché sacrifica l'immediatezza della comunicazione.
Allora avrei dovuto forse buttare tutto negli event-handler a beneficio della leggibilità (cosa che non pagherebbe affatto in codice da produzione) ma avrei probabilmente sollevato il disappunto di coloro che sono familiari con WPF e MVVM.
Ecco dunque che torna la cara vecchia console a salvare la situazione. Penso che userò il client WPF per mostrare cosa si ottiene, e il client console per analizzare le parti salienti del codice di WCF4.
Per chi sta pensando a Winform, ritengo che sia una spada di Damocle. Con Winform è facile partire con poco codice e in un attimo il progetto si dilata a dismisura senza ottenere nemmeno lontanamente i risultati di WPF.
Certamente il mio caso è molto particolare, ma questo solleva ancora una volta l'annoso problema del mancato supporto nativo di WPF a MVVM. Se le classi di infrastruttura di MVVM fossero dentro gli assembly del framework, l'esempio sarebbe più snello e più condivisibile con chi non è ancora praticissimo di WPF.