Dopo circa due mesi di studio (notturno e frammentato) mi sono fatto una mia idea di WPF: potente e affascinante, ma pericoloso.
Sulla potenza e sul fascino non mi soffermo, il web è pieno di info al riguardo.
Sul fatto che sia pericoloso, faccio un semplice esempio, basato sull'interazione tra XAML e codice c#.
L'uso promisquo di codice XAML e codice c#, oltre ad essere una necessità, è la pietra angolare della filosofia di progetto di WPF, che prevede la separazione tra i layer di presentazione e di logica (permettetemi questo obbrobrio, tanto avete tutti capito cosa intendo).
Questa promisquità da una parte è un bene, perchè usando una programmazione dichiarativa, è possibile esprimere cosa si vuole ottenere, lasciando che il framework implementi il come si ottiene.
Dall'altra è male, perchè abbiamo fatto tanto per avere sistemi di sviluppo che verifichino quanto più possibile a "compile time" la correttezza (almeno formale) dei nostri sorgenti, mentre con WPF si fa allegramente uso di valori testuali per utilizzare dal codice c# gli oggetti definiti in XAML.
Un esempio semplicissimo, con una TextBox e un Button:
<Window x:Class="WpfApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Esempio" Height="300" Width="300">
<StackPanel>
<TextBox Name="textBox1" Margin="5"/>
<Button Click="Button_Click" Margin="5">Mostra il valore</Button>
</StackPanel>
</Window>
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.FindName("textBox1").ToString());
}
Il risultato di questa complicatissima applicazione è a dir poco spettacolare:
Ora, se per qualsivoglia motivo cambiamo nel sorgente XAML il nome del TextBox, sostituendo "textBox1" con "pippo", abbiamo due effetti collaterali indesiderati:
- L'ambiente di sviluppo (VS 2008), visto che sto cambiano un valore testuale, non prevede alcun avviso del tipo "cerca e sostituisci";
- La compilazione fila liscia come l'olio.
Peccato che ora l'esecuzione del programma vada in crash.
Mi sa che tocca lavorare di brutto con i test, ma al momento non ho alcuna esperienza di TDD con WPF, perchè (come mio solito) ci ho solo giocato per capire cos'è.
E voi cosa ne pensate? Se interessa potremmo spostare la discussione sul forum.
Io, per non saper ne leggere ne scrivere (e ne sicuramente programmare), torno a WinForm.