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

ValidationContextComponent : un componente per la Janky.Validation

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!

powered by IMHO 1.2

Print | posted on giovedì 20 aprile 2006 16:20 | Filed Under [ Tecnologia ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET