Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Qualche pensiero sul pattern Command...

Sto facendo esperimenti su una piccola applicazione Windows Forms che possa implementare in qualche modo il meccanismo tale per cui l'utente possa annullare le operazioni che fa sui controlli sulla form stessa. Immaginate di avere un business object di qualsiasi tipo, che espone 5 proprietà di tipo string. Adesso, immaginate di bindare queste 5 proprietà a 5 TextBox su una Windows Forms.

Ogni volta che l'utente modifica il valore di una TextBox, tale valore viene catapultato (!) nella proprietà del business object. Fin qua nulla di particolare. Però ora supponiamo di voler dare all'utente la possibilità di premere CTRL+Z o dei pulsanti sulla toolbar per tornare indietro, per annullare qualcosa che ha fatto.

Habitat ideale per il pattern Command, non c'è che dire. Lavorando strettamente con data binding (e per adesso senza BindingSource), l'unico modo che ho di intercettare una modifica ad una proprietà è attraverso il set della proprietà stessa del business object. Quando passo da questo punto del codice, creo un oggetto command e lo aggiungo alla history dei command definiti fino a questo momento.
Questo accade ogni volta che l'utente modifica una TextBox.

Ma c'è un problema. Quando annullo l'ultima modifica, ripasso comunque attraverso un set, e questo non va bene. Potrei reimpostare il valore accedendo al membro privato, ma questo non scatenerebbe l'update dei controlli bindati. Ci devo ragionare su.

Le risposte che mi sono dato finora sono fondamentalmente due: o applicare in qualche modo anche il pattern Proxy, oppure bindare attraverso il BindingSource e sfruttare alcune caratteristiche che possono tornare utili. In primo piano ad esempio, vedo gli eventi che intercettano il cambiamento di valore di un datamember. Ci sto ragionando, mumble mumble!

powered by IMHO 1.3

Print | posted on sabato 29 aprile 2006 17:45 | Filed Under [ Tecnologia ]

Feedback

Gravatar

# re: Qualche pensiero sul pattern Command...

ciao Luca, grazie del suggerimento!
anche il Memento era fra i candidati per l'implementazione, ci guarderò meglio. In effetti, usare l'interfaccia ICloneable sull'oggetto, mi permetterebbe di applicare il memento...o forse sto solo facendo confusione.
:-)
30/04/2006 19:15 | Igor Damiani
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET