Posts
83
Comments
165
Trackbacks
11
dicembre 2010 Blog Posts
Un piccolo problema con MVVMLight

In questi giorni abbiamo iniziato lo sviluppo di un nuovo progetto con WPF. Quale contesto migliore per iniziare a valutare MVVMLight, un framework veramente "leggero" che mette a disposizione tutto l'essenziale per lo sviluppo di applicazioni WPF/Silverlight sfruttando il pattern MVVM, di cui tutti parlano un gran bene...

In prima battuta il framework mi sembra proprio ben fatto e, soprattutto, veramente poco invasivo, a differenza, per esempio, di quanto avviene con Prism che, seppur approcciando una problematica più complessa (UI composition) mette a disposizione una "rete" di classi troppo intricata e difficilmente "spacchettabile" (ma questo sarà oggetto di un altro post)

Tornando a noi...facendomi guidare dai test e dal ritmo che mi garantiscono ho iniziato a creare ViewModel ed aggiungerne funzionalità. Ed ecco sopraggiungere un piccolo, fastidioso problema: volendo testare che, a fronte di una particolare condizione, venisse scatenata la rivalutazione del metodo CanExecute di un command ho scritto il, solito, seguente test:

Fixture.png

Con la seguente implementazione:

ViewModel.png

Con mia somma sorpresa, il test non passa...no bello!!! Piccola nota di colore: sostituendo l'implementazione di RelayCommand di MVVMLight con l'implementazione data da Prism (DelegateCommand) il test passa.

Indagando, grazie anche all'aiuto di Corrado (thanks a lot), abbiamo trovato l'inghippo: l'implementazione di RelayCommand per WPF basa il suo funzionamento su CommandManager. Il tutto a runtime funziona egregiamente, ma in fase di unit-test, per esempio, in cui nessun controllo "consuma" il command esposto dal viewmodel, l'engine di WPF non ritiene necessario rivalutare il metodo CanExecute del command stesso, nonostante venga forzata la chiamata al metodo RaiseCanExecuteChanged.

Come risolvere il problema? Prendere l'implementazione di RelayCommand per Silverlight che funziona egregiamente, oppure utilizzare un'altra implementazione di ICommand (per esempio i DelegateCommand di Prism) fino a quando Laurent non fixerà il problema (dovrebbe essere già stato avvisato, giusto Corrado?)

posted @ venerdì 31 dicembre 2010 12:48 | Feedback (7)
CD2010...a couple of days after

E anche questi communitydays sono terminati. Anche questa volta sono stati frutto di notevoli spunti...vedremo se il tempo mi permetterà di approfondire alcune idee che mi frullano per la testa.

Ed ora un veloce resoconto delle (poche) sessioni che ho potuto seguire:

Mauro e GianMaria: ottima e "densa" sessione. Ci hanno inondato di alune "chicche" architetturali, che avranno bisogno di un po' di tempo di decompressione per poter prendere forma. Le sessioni real-world hanno sempre il loro perchè...

Corrado: essendo un "fanatico" di WPF e Silvelight (vedremo se anche di WP7) non potevo mancare. Speaker d'eccezione e sessione lineare...diciamo che essendo una sessione 400 e soprattutto HARD, mi aspettavo di veder "saltare" qualche bit in più. Comunque non c'è che dire: quando in campo scende Corrado c'è solo da imparare.

Per quanto riguarda la mia sessione, spero vivamente di aver fatto nascere qualche interrogativo tra i partecipanti. CQRS ed event sourcing in prima battuta potrebbero sembrare uno stravolgimento totale rispetto all'approccio architetturale a cui siamo "abituati", ma una loro più attenta analisi fa emergere come siano semplicemente un'evoluzione o meglio un completamento (in alcuni scenari) di DDD. L'idea della mia sessione era proprio quella di presentare uno scenario diverso che rimescolasse un po' le carte rispetto alle situazioni/implementazioni "tradizionali" cercando di forzarci a "rimetterci in gioco".
Il feedback post-sessione sembra positivo e l'intento centrato...se avete seguito la sessione e avete voglia di condividere le vostre considerazioni, i commenti sono aperti e/o la mia mail la conoscete.

Non posso dimenticarmi di ringraziare Andrea e Daniele per l'organizzazione...ottima come al solito. Questa volta non ci han fatto mancare nemmeno un'esercitazione anti-incendo e la neve...di più non si poteva proprio chiedere.

Ai prossimi CommunityDays...

posted @ lunedì 20 dicembre 2010 10:57 | Feedback (0)
DDD @ CommunityDays

Riprendo il titolo del post di Andrea (non me ne voglia :-) ) per ricordare a tutti che siamo agli sgoccioli: i communitydays sono alle porte e i posti disponibili ancora pochi (sono già sold-out?).

Quest'anno la mia partecipazione sarà attiva, in qualità di speaker (incrociamo le dita). L'idea della mia sessione prende spunto da situazioni reali che sempre più spesso ci capitano nella vita-da-dev (tutto attaccato) di tutti i giorni e che hanno dato origine ad una serie infinita di supposizioni, incertezze ed elucubrazioni sul modo di applicare DDD. Se ci mettiamo poi che da un po' di tempo circolano nel "mondo architetturale" alcune buzz-word particolari, quali CQRS ed EventSourcing...cercheremo quindi di capire vantaggi e svantaggi di tale approccio e come, dove e quando vale la pena prenderlo in considerazione.

Be...non si può proprio mancare
Ci si vede là?

posted @ sabato 11 dicembre 2010 15:56 | Feedback (0)