jankyValidation [#3]: La Strozus Finanziamenti

Un esempio concreto...La STROZUS Finanziamenti
Siete degli sviluppatori di applicazioni, e state lavorando per il portale di back end della nota società Strozus.
La Strozus è una importante società di strozz..ehm di finanziamento il cui motto è:
"...con Strozus otterrai senza problemi il tuo finanziamento!
Nessuna garanzia, nessuna busta paga...ci basta sapere come ti chiami...e dove vanno a scuola i tuoi figli!
E se ti dimentichi di pagare una rata...Sandrone (energumeno di 200kg) viene direttamente a casa tua a ricordartelo di persona!"
(Per informazioni sulla Strozus, chiedere a quelli di Mai dire Gol, o a Paola Cortellesi...nessun riferimento a fatti e persone è casuale...)

Ecco il l vostro modello di dati:

Ed ecco le operazioni che un operatore Strozus può effettuare sulla pratica di finanziamento con le relative regole di validazione:
1. Inizializzazione (inserisce la pratica nel db)
  • Codice deve matchare con uno specifico pattern
  • Cliente non nullo
  • Operatore non nullo

2. Approvazione (la pratica viene finanziata)
  • Stesse di Inizializzazione
  • L'operatore che gestisce la pratica deve avere almeno 15 pratiche concluse positivamente OPPURE deve avere 10 anni di lavoro in Strozus
  • Indice Sicurezza del Cliente maggiore di 8

3. Approvazione Con Riserva (la pratica viene finanziata ma con riserva, è necessaria una visita di Sandrone...come avvertimento!)
  • stesse di Inizializzazione
  • Importo della Richiesta > 80000 oppure IndiceSicurezzaCliente compreso tra 6 e 8

Ecco qui tutta la solution basata su un 3tier e il codice della Janky.Validation
La definizione dei vari ValidationContext è effettuata nel BusinessLayer (in modo da poter essere riutilizzati in vari layer di presentazione):

 

Inserisco qui per riferimento qualche frammento di codice come riferimento, ma rimando per una visione più dettagliata direttamente al progetto. Spero di aver scritto in modo auto-parlante.

public class SavingValidation : ValidationContext
{
    protected Finanziamento finanziamento;

    public SavingValidation(Finanziamento finanziamento)
    { 
       this.finanziamento = finanziamento; 
    } 
    public override void Initialize()
    { 
       this.Rules.Add(new MatchRegexRule("Codice errato, deve essere almeno di 5 cifre", this.finanziamento.Codice, "\\d{5}"));
       this.Rules.Add(new IsNotNullRule("Manca il cliente", this.finanziamento.Cliente)); 
       this.Rules.Add(new IsNotNullRule("Manca l'operatore", this.finanziamento.Operatore)); 
       this.Rules.Add(new ValueComparisonRule("Troppi soldi!", this.finanziamento.ImportoRichiesto, 100000, ComparisonType.LesserOrEqual));
    }
}


e prossimamente si potrebbe scendere nel dettaglio di alcune chicche, come la cortocircuitazione delle regole o l'uso del context nel presentation.

Print | posted on lunedì 27 marzo 2006 14:18

Comments on this post

# re: jankyValidation [#3]: La Strozus Finanziamenti

Requesting Gravatar...
Grande janky ... più o meno come la souzione che adotto io... siamo in due e non ci siamo nemmeno parlati. Quando accadono queste cose significa che la cosa ha decisamente senso! :-D
Left by M.rkino on mar 27, 2006 3:02

# re: jankyValidation [#3]: La Strozus Finanziamenti

Requesting Gravatar...
Ecco, visto che io l'avevo visto in anticipo adesso aspetto qualche commento in più su shortcircuit e context validation.
Left by Tommaso Caldarola on mar 27, 2006 3:30

# re: jankyValidation [#3]: La Strozus Finanziamenti

Requesting Gravatar...
[Janky]: beh... la soluzione che sto adottando io nei miei nuovi progetti non è del tutto simile alla tua... quanto proposto da te è ben ingegnerizzato, la mia soluzione è decisamente più povera e semplice, quello che le accomuna è il concetto...
Left by M.rkino on mar 27, 2006 3:40

# non si finisce mai di imparare... e meno male!

Requesting Gravatar...
Left by papo we(b)log on mar 29, 2006 2:43

# non si finisce mai di imparare... e meno male!

Requesting Gravatar...
Left by papo we(b)log on mar 29, 2006 2:45
Comments have been closed on this topic.