Introduzione
Trovo spettacolare
la Janky.Validation del buon Giancarlo. Come
ha spiegato lui stesso in passato, la Janky.Validation è una libreria che ci
permette di validare i nostri business object in un determinato e particolare
contesto. In pratica, ogni contesto di validazione contiene una o più
classi derivate da RuleBase, che esprimono per l'appunto le regole che devono
essere rispettate.
La cosa scomoda è che tutto va fatto via codice. Quindi, per esempio, se
volessi validare un oggetto Articolo, nel mio software di
fatturazione è scritto una classe che contiene:
this.Rules.Add(new StringLengthRule(_controls[0], "Inserire un codice da 1 a 10 caratteri!", _articolo.Codice, 1, 10));
this.Rules.Add(new StringLengthRule(_controls[1], "La denominazione è obbligatoria!", _articolo.Denominazione, 1, 255));
this.Rules.Add(new ValueInRangeRule(_controls[2], "Il costo unitario è obbligatorio!", (double)_articolo.CostoUnitario, 0, 50000, ComparisonType.Greater, ComparisonType.LesserOrEqual));
this.Rules.Add(new ValueInRangeRule(_controls[3], "Secondo le leggi in vigore, l'IVA è sempre al 20%!", (double)_articolo.Iva, 20, 20, ComparisonType.GreaterOrEqual, ComparisonType.LesserOrEqual));
Questo codice è inserito in una classe ArticoloValidator,
derivata dalla ValidationContext della Janky.Validation. Anche il controllo
delle BrokenRules va fatto via codice, con un banale foreach per gestire le regole fallite e mostrarle in qualche
modo sulla UI. Questo "mostrarle" può voler dire una serie di MessageBox.Show
(terribile!) oppure tramite un errorProvider. Il tutto sempre via codice, senza
speranze.
Il componente ValidationContextComponent
Ma
la Janky.Validation sta per diventare qualcosa di molto più user-friendly,
comodo e veloce da utilizzare, specialmente per chi sviluppa in Windows
Forms. E' in avanzata fase di sviluppo una classe denominata
ValidationContextComponent che ha le seguenti caratteristiche:
- è un componente, quindi può essere trascinato su una Windows Forms e
finire nella tray-area
- incapsula al suo interno il buon ValidationContext originale della
Janky.Validation
- il ValidationContext espone una List<RuleBase> che questa volta può
essere gestita direttamente dall'IDE tramite l'editor standard di VS2005
- completo supporto a design-time della gestione del ValidationContext
- è possibile associare il messaggio di errore per ogni Rule
- è possibile associare un Control per ogni Rule, per l'utilizzo con
l'errorProvider
La creazione di questo componente ha provocato il refactoring di parecchio
del codice delle Rule previste inizialmente. Tali modifiche riguardano per certi
versi l'implementazione interna delle Rule. Se avete usato la Janky.Validation,
probabilmente potete continuare ad usarla così com'è, ma non vi assicuro nulla!
Nel frattempo, un piccolo screenshot di come appare adesso l'editor di
VS2005. Cliccando sul pulsante Add, viene proposto in
automatico l'elenco delle classi derivate da RuleBase. Ogni sottoclasse di
RuleBase chiede ovviamente parametri diversi, che l'editor chiede nella parte
destra: nell'esempio qui sotto, la regola è la StringLengthRule, quindi ci
vengono chieste la lunghezza minima e massima della stringa da validare. Ci
sto ancora lavorando, ma speriamo di poter pubblicare qualcosa appena
possibile...
Per adesso posso solo dire grazie a Janky,
che mi ha accettato nel team di sviluppo di questa libreria che tanto
mi appassiona!