WindowForms, UI e comportamenti standard da tenere ...

Solitamente non solo uno sviluppatore vicino allo sviluppo di UI  e WindowForms... in questi giorni mi sono ritrovato a implementare una semplice e veloce applicazione windows. Non ho potuto fare a meno di notare che qui e la nella gestione degli eventi il buon senso mi _costringeva_ a scrivere del codice ripetitivo per gestire il comportamento dell'UI durante lo svolgimento del codice... in particolare sarebbe corretto impostare/controllare il comportamento del cursore. Insomma più o meno il codice che andavo a scrivere nella getsione del click dei vari bottoni aveva una ricorrente struttura che più o meno suona come quella che segue.

private myButton_Click(object sender, EventArgs e)
{
   Cursor.Current = Cursors.WaitCursor;
   try
   {
      //...Implementation 
   }
   finally
   {
      Cursor.Current = Cursors.Default;
   }
} 

Questo sabato ho iniziato a ragionare quale potrebbe essere un metodo interessante per evitare la ripetizione di codice e allo stesso tempo non perdere in lettura.... anzi il meglio sarebbe poter scrivere del codice quanto più pulito e semplice in modo che guardano il codice dell'handler del bottone non mi perdessi nel capire arzigolate strutture di codice. Per questo motivo ho subito scartato l'uso di delegate, metodi anonimi e tecniche correlate e/o similari...

Quello che ne ho ricavato è la definizione di un "UIBehaviuorScope"...

    class UIBehaviuorScope: IDisposable 
    {
        public UIBehaviuorScope(Cursor cursor)
        {
            Cursor.Current = cursor;
        }
        #region IDisposable Members
        public void Dispose()
        {
            Cursor.Current = Cursors.Default;
        }
        #endregion
    }

...che poi messo in pratica ...

private myButton_Click(object sender, EventArgs e)
{
     using (UIBehaviuorScope scope = new UIBehaviuorScope(Cursors.WaitCursor))
     {
        //Implementation
     }
}

Anche se l'idea potrebbe essere ritenuta interessante non mi soddisfa totalmente ma potrebbe essere qualcosa di interssante da testare in casi reali... La soluzione migliore credo che possa essere quella di definire un attributo (esempio "UIBehaviourAttribute") che aiuti ad autocompletare il codice "ripetitivo"... sarebbe quindi davvero interessante se si potesse scrivere qualcosa come quanto segue.

[System.Windows.Forms.UIBehaviour(WaitCursor = True)]
private myButton_Click(object sender, EventArgs e)
{
        //Implementation
}

Forte della convinzione che sia davvero qualcosa di utile nell'implentazione delle UI ho postato questo mio suggerimento su "lady-bug", "UI Behavoiur Attribute" , con quel mio inglese un pò maccaronico ;-p Che dite l'idea è proprio così balsana?!

posted @ sabato 15 aprile 2006 20:54

Print

Comments on this entry:

# re: WindowForms, UI e comportamenti standard da tenere ...

Left by Emanuele DelBono at 15/04/2006 21:37
Gravatar
Sento odore di AOP!! ;-)

# re: WindowForms, UI e comportamenti standard da tenere ...

Left by M.rkino at 15/04/2006 21:58
Gravatar
In realtà non sono un fan di AOP (anzi) ma credo che in alcuni contesti la faciità di lettura del codice sia da ritenere quasi un must senza temere di perderne in performance e/o quant'altro... o forse sono stato deviato dalla mia estrema pigrizia nell'implementare certe burocrazie di codice nel contesto UI ;-p

# re: WindowForms, UI e comportamenti standard da tenere ...

Left by Federico Zanin at 18/04/2006 13:08
Gravatar
Ciao Marco, l'idea è senz'altro valida, complimenti. Una soluzione quasi identica l'avevo già vista nella diapositiva n. 14 del webcast di Francesco Balena ".NET Coding Guidelines & Best Practices (parte 2)".

# re: WindowForms, UI e comportamenti standard da tenere ...

Left by Federico at 19/04/2006 13:00
Gravatar
Certo, ecco il link:
http://www.microsoft.com/italy/msdn/risorsemsdn/eventi/webcast/passati/Framework.mspx
Il titolo esatto del webcast è "Regole di stile e Best Practice - parte 2"
Ciao.
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011