alessandro melchiori
() => melkio.OnStage();

Alessandro Melchiori

  • Il processo di bootstrapping di un'applicazione WPF con Caliburn.Micro

    Nel post precedente abbiamo elencato una serie di framework/toolkit utili per il supporto allo sviluppo di applicazioni WPF/SL/WP/W8. Tutti questi framework, tranne MVVM-Light se non sbaglio, hanno il concetto di bootstrapping dell’applicazione, ovvero di setup, configurazione e avvio.

    Questa funzionalità è tanto importante, quanto critica: maggiori sono le facilities che il toolkit ci mette a disposizione, molto meno codice di plumbing siamo costretti a scrivere. Questo però è uno dei primi punti che possono darci feedback immediati su quanto bene possa essere scritto un toolkit. Il framework scelto deve essere a supporto e non vincolare in scelte/implementazioni. Già da questo, come ho avuto modo di scrivere già in passato (qui), Prism se ne esce con un “rating” non del tutto sufficiente (visti i tentativi falliti riportati qui e qui)

    In questo post, vedremo come Caliburn.Micro approccia il problema.

    Per prima cosa installiamo, tramite nuget, il package “Caliburn.Micro”

    Creiamo ora una coppia “view” - “viewmodel”, ponendo particolare attenzione al fatto che i nomi devono, se vogliamo sfruttare out-of-the-box il sistema di convenzioni messo a disposizione dal toolkit, seguire il pattern “XxxView” - “XxxViewModel”. Nel nostro caso ShellView e ShellViewModel, come mostrato nell’immagine seguente:

    Caliburn.Micro, così come Radical, sfrutta pesanetemente il paradigma “convention over configuration” per semplificare drasticamente la vita allo sviluppatore, fornendo, praticamente a costo zero quasi tutta l’infrastruttura per fare wire-up dell’applicazione. Questa feature, è una delle discriminanti che ci hanno fatto preferire questi toolkit agli altri. Il livello di customizzabilità delle convenzioni, che valuteremo nei prossimi post per entrambi i toolkit, è uno dei parametri che ci permetteranno di valutare la bontà (o meno) dei framework in oggetto.

    Tornando a noi, manca vermante poco, per poter avviare, finalmente, la nostra applicazione: il bootstrapper. Con il seguente snippet di codice e la customizzazione dello xaml dell’applicazione abbiamo soddisfatto i requisiti minimi per poter integrarci e iniziare a sfruttare le potenzialità di Caliburn.Micro

    
    
    
    

    Premiamo F5, et-voilà l’applicazione magicamente parte senza aver fatto o configurato nulla di particolare.

    Nel prossimo post della serie vedremo se e come approcciare lo stesso problema con Radical

  • Azure and Git @ UgiDotNet

    La piattaforma di Windows Azure sta crescendo, ogni settimana si arrichisce di nuove feature sempre più accattivanti, l’apertura e l’integrazione con mondi extra-microsoft è sempre più evidente. Da qualche mese abbiamo la possibilità di integrare in modo molto efficiente ed efficace il processo di deploy dei Windows Azure Web Site con Git (e TFS). Se volete scoprire come, ieri è stato pubblicato su UgiDotNet un mio articolo a riguardo.

    Ovviamente, ogni feedback è ben gradito :-)

  • Blob storage e hosting di siti statici

    Questo post è parte di una serie su windows azure. Ecco il link per la lista di tutti i post precedenti.

    Le funzionalità messe a disposizione da Windows Azure sono decisamente tante: Web Site, Cloud Services, Storage…Alcuni scenari in cui trarre vantaggio da queste funzionalità, però, non sono così evidenti come altri e bisogna utilizzare un po’ di immaginazione per definirne alcuni un po’ “insoliti”. Uno di questi, oggetto di questo post, è la possibilità di sfruttare il Windows Azure Blob Storage come sistema di hosting per siti dai contenuti statici.

    Dato che un sito statico non ha bisogno di un data store e, per esempio, di un worker role per il processing in background delle operazioni, la scelta di un web role o di un web site, potrebbe essere “sovradimensionata”. Dato che i blob contenuti in un container pubblico sono accessibili attraverso delle semplici API (GET over HTTP), il gioco è fatto. Quello che possiamo esporre, non sono solo dei semplici file html, ma anche immagini, pdf, javascript…

    Nulla di più facile insomma…una delle poche cose di cui tenere conto è il setup del ContentType di ogni blob, in modo che il browser sappia come gestire la risorsa.

    Con la seguente funzione ricorsiva è possibile caricare su un particolare container la struttura, più o meno complessa, di un sito, partendo dalla root e mantenendo la gerarchia che caratterizza la struttura del sito stesso, simulando, come abbiamo visto nel post precedente, una gerarchia simil-filesystem, tramite l’utilizzo di “directory vistuali”.

    
    

    Il risultato di tutto ciò è, per esempio, la disponibilità del sito di codiceplastico hostato dal Windows Azure Blob Storage

  • 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.

  • WindowsAzure.Resources

    Solo un veloce “inframezzo” per segnalare un po’ di risorse utili in merito alla piattaforma:

    • per prima cosa tutte le sessioni di //Build/ sull’argomento

    • la Windows Azure Conf: ”On November 14, 2012, Microsoft will be hosting Windows AzureConf, a free event for the Windows Azure community. This event will feature a keynote presentation by Scott Guthrie, along with numerous sessions executed by Windows Azure community members. Streamed live for an online audience on Channel 9, the event will allow you to see how developers just like you are using Windows Azure to develop applications on the best cloud platform in the industry. Community members from all over the world will join Scott in the Channel 9 studios to present their own inventions and experiences. Whether you’re just learning Windows Azure or you’ve already achieved success on the platform, you won’t want to miss this special event.” Da non perdere, direi…

    Insomma, di materiale da macinare nelle prossime settimane credo proprio ce ne sia parecchio. Ora “basta solo” trovare un po’ di tempo…