Confessions of a Dangerous Mind

Brain.FlushBuffer()
posts - 176, comments - 234, trackbacks - 93

Pragmatic MVVM: ovvero come semplificarsi la vita senza “pattern misunderstanding”

Ultimamente ho avuto modo di leggere un bellissimo scambio di domande/risposte su StackOverflow (lo potete trovare qui). In pratica la domanda era: “… devo dare il focus ad una textbox al load della view. Sto impiegando MVVM, qual’è il metodo migliore per farlo?”.

Una delle possibili risposte, per chi desidera applicare il pattern MVVM “strict”, ovvero senza assolutamente nessun code-behind nella view, potrebbe essere di utilizzare il FocusManager collegato ad una proprietà esposta dal ViewModel che indichi a quale controllo dare il focus. A parte il fatto che non mi piace l’idea che il ViewModel debba conoscere chi siano i controlli della view, questo è il classico caso di “pattern misunderstanding”.

MVVM non è e non vuole essere una “scommessa” di “quanto codice riesco a scrivere senza scriverlo nella View”, bensì vuole essere un pattern che promuove la separazione dei compiti (separation of concerns). Ora, l’azione di porre il focus su un controllo sembra effettivamente restare isolato alla view, e quindi non c’è alcun motivo che spinga lo sviluppatore a scegliere di mettere il codice per impostare il focus nel view model.

Con ciò voglio semplicemente diffondere un messaggio: scrivere codice nel codebehind della view non è peccato, fino a quando questo codice resta ad uso e consumo della view stessa. Se il codice comincia ad avere connotati di logica di business che sconfinano dal dominio della view (contatti con il model, ad esempio) allora il posto giusto dove collocarlo è il view model. Quindi occhio non solo a cosa si scrive, ma anche (e soprattutto) a dove lo si scrive!

Print | posted on Monday, August 10, 2009 8:14 PM |

Feedback

Gravatar

# re: Pragmatic MVVM: ovvero come semplificarsi la vita senza “pattern misunderstanding”

Completamente in accordo con te. Anzi diamo anche un occhiata al codebehind, magari qualcosa lo possiamo mettere direttamente nello xaml.
8/10/2009 11:48 PM | Marco Bonera
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET