Toolkit per lo sviluppo di applicazioni WPF/SL/WP/W8

Chi ha sviluppato applicazioni mediamente complesse in WPF (e/o SL/WP/W8) nel 99% dei casi ha adottato il pattern MVVM, diventato ormai lo standard di fatto per l’organizzazione della parte di “presentation”. Tale pattern, se da una parte permette di cogliere tutte le potenzialità delle tecnologie in gioco, rischia, alla lunga, di diventare “molto prolisso” e di rischiare di portare “fuori controllo” i developer se non adeguatamente supportati da un toolkit.

Ad oggi, per quel che ne so (e quindi correggetemi se sbaglio), i toolkit presenti sul “mercato”, tra cui come dev possiamo attingere, sono essenzialmente quattro:

Il primo della lista, Prism, sviluppato dal team di P&P di Microsoft è uno dei primi che abbiamo cercato di adottare, fin dalle primissime edizioni (ormai anni fa), soprattutto per la gran mole di documentazione disponibile, purtroppo sempre con scarsi risultati. Nonostante le feature messe a disposizione siano notevoli (infrastruttura di base, UI composition, modularizzazione, solo per citare le più importanti) la complessità e la rigidità di tale framework ha sempre reso molto difficile la customizzazione di alcuni scenari: il toolkit non è pensato per permettere di “deviare” con semplicità dalle implementazioni messe a disposizione dal team. Ogni qual volta si è resa necessaria l’implementazione di una feature “fuori concorso” il rischio di non riuscire a centrare l’obbiettivo si è rivelato veramente molto alto. Per fare un semplice esempio, le difficoltà incontrate per “pluggare” un framework di IoC diverso da quello utilizzato di default (Unity/MEF) sono state veramente insostenibili, al punto da vincolare la scelta a MEF (che un container di IoC non è, ma questo è un altro discorso).

Questo aspetto enfatizza una delle caratteristiche da ricercare assolutamente per un’adozione serena di un toolkit/framework infrastrutturale: deve essere pensato per essere configurabile/customizzabile ed estendibile con estrema semplicità.

In seconda battuta, grazie anche al grande successo che ha ottenuto e sta tutt’ora ottenendo siamo passati a MVVM-Light. Il framework è ben fatto, ha alcune funzionalità di supporto (MessageBroker, ViewModelBase, EventToCommand per citarne alcune) molto utili, ma, a dispetto del grande successo ottenuto, una delle sue peculiarità (l’essere “light”) è anche un grosso limite se adottato in progetti di una certa complessità. E’ vero, il nome è esplicativo: non vuole essere un framework “invadente”, ma fornire solo le feature indispensabili per un corretto impiego del pattern MVVM o poco più. Ma questo implica la mancanza di una guida nella parte “infrastrutturale” di sviluppo dell’applicazione, obbligando il team a gestire anche alcuni aspetti che invece mi aspetterei di avere “out-of-the-box” da un toolkit che cura la parte di presentation.

Rimangono quindi gli ultimi due toolkit, Radical sviluppato dal mio amico Mauro e Caliburn.Micro. Entrambi erano stati scartati da una prima analisi per diversi motivi, ma soprattutto o per la scarsa documentazione (Radical) o per la numerosità di feature messa a disposizione, che nel caso di Prism si era rivelato essere un pesante side-effect. Entrambi si sono invece rivelati, spulciando sia nel codice sorgente, sia nella (poca o tanta) documentazione che si trova in rete, ricchi di spunti interessanti, molto ben fatti e soprattutto completi, senza per questo essere vincolanti nelle scelte del team.

Nei prossimi post, cercheremo di evidenziare gli aspetti salienti di questi due framework (tenendo in considerazione, di tanto in tanto, anche MVVM-Light), quali funzionalità espongono,  le possibilità di customizzazione e la facilità di utilizzo. Non disdegneremo l’incursione nel codice sorgente, perchè ve lo assicuro, in entrambi ci sono delle “chicche” da non perdere.