際際滷

際際滷Share a Scribd company logo
DDD e validazione




Andrea Canegrati
Grazie!
Agenda
 Cosa si intende per validazione
 Validazione nel contesto DDD
 Diverse tipologie di validazione
   Validazione invariante
   Validazione contestuale
 Tecniche di validazione a confronto
Un caso reale
Hotel-Reception System
         (HRS)
 Sistema di registrazione di nuovi ospiti presso un
  hotel
 Per un ospite sono previsti i seguenti servizi:
   Assegnazione di una camera vuota
   Possibilit di posto auto presso una struttura
    convenzionata
   Possibilit di usufruire del Kit di benvenuto se in
    possesso della Carta Vip
Cosa si intende per
   validazione?
Significato di
           validazione
 Processo atto a verificare che particolari
  requisiti siano soddisfatti da uno specifico
  elemento o da un insieme
 I requisiti sono caratteristiche proprie del
  sistema che si sta considerando
 Obiettivo: mantenere lintegrit di un sistema!!
Validazione nel mondo
          DDD
 Particolari requisiti da soddisfare: Regole di
  business legate al dominio
 Verifica dei requisiti per un elemento:
  Applicazione di regole a entit, value object e
  aggregati
Esempi di regole in HRS
 Un ospite per registrarsi deve fornire i propri dati
  anagrafici:
    Nome
    Cognome
    Numero di documento
 Se in possesso della Carta Vip allora avr accesso al
  Kit di Benvenuto
Tipologie di validazione
Tutte le regole sono
       sempre valide?
 dipende 

 E possibile suddividere la validazione in due
  macrocategorie:
   Validazione i稼厩温姻庄温稼岳艶
   Validazione c看稼岳艶壊岳顎温鉛艶
Validazione Invariante
 Vincoli che rappresentanto delle caratteristiche
  proprie di unentit o di un value object e fanno
  parte del suo comportamento
 Deve sempre essere rispettata!!!
 Esempio in HRS:
    Un ospite DEVE avere nome, cognome e un
     documento di identificazione
    Il numero di documento DEVE essere univoco
Validazione Contestutale
 Non comprende vincoli obbligatori
 Viene valutata solamente in determinate
  situazioni legati a contesti o ad azioni specifiche
 Viene valutata ogni volta che si esegue lazione o
  si entra nel contesto
 Esempio in HRS:
    Un ospite potr avere il Kit di Benvenuto allarrivo
     solo in possesso di una Carta Vip
Tecniche di validazione
     i稼厩温姻庄温稼岳艶
Approccio Always Valid
 Verifica delle regole alla creazione
  dellentit/value object e ad ogni operazione
  che pu嘆 alterarne lo stato
 Conseguenze:
   Lo stato degli oggetti non 竪 MAI inconsistente
   Quando gli elementi interagiscono tra di loro non 竪
    necessario verificare nuovamente i vincoli invarianti
Always Valid: creazione
     degli oggetti
 La creazione delle entit/value object deve
  impedire di ottenere delle istanze non valide
 Utilizzo di Factory o di Factory-Methods
Always Valid: operazioni
      di modifica
 Ogni operazione deve verificare i vincoli invarianti e
  fallire nel caso in cui non vengano rispettati
 Evitare di utilizzare i setters per modificare i valori
  dellentit/value object
 Ricorrere a metodi che rappresentano le operazioni
  espresse dallubiquitous language
Approccio Valid on
         demand
 Verifica delle regole effettuata alla chiamata di un
  metodo di validazione che pu嘆 appartenere alla
  classe oppure delegato ad un validatore esterno
 Conseguenze:
    DEVE sempre essere richiamata prima di ogni
     operazione che coinvolge lelemento
Quale tecnica utilizzare?
 Essendo vincoli invarianti ha senso creare un oggetto senza
  che essi siano rispettati?
 Esempio in HRS:
    Pu嘆 esistere un ospite senza documento?
    Ha senso modificare lanagrafica di un ospite inserendo
     nome vuoto?
 Lentit/value object verr validata prima di ogni
  operazione che la/lo coinvolge?
 Esempio in HRS:
    Verificare che lospite sia valido prima di effettuare la
     richiesta per il posto auto
 La risposta 竪...NO => ALWAYS VALID!!
Tecniche di validazione
    c看稼岳艶壊岳顎温鉛艶
Implementazione
  validazione contestuale
 Consiste nella valutazione di condizioni in un
  contesto specifico
 Esempio in HRS:
    Se un ospite ha la Carta Vip 竪 un ospite Vip ed ha
     diritto a servizi speciali (Kit di Benvenuto)
 In pratica: Specification
HRS in Action!

DEMO SLIDE
Che la validazione sia con
            voi!
Grazie a tutti!!
I miei riferimenti:
 Email: andrea@canegrati.net
 Blog: http://blogs.ugidotnet.org/darthdog/

More Related Content

DDD e Validazione

  • 3. Agenda Cosa si intende per validazione Validazione nel contesto DDD Diverse tipologie di validazione Validazione invariante Validazione contestuale Tecniche di validazione a confronto
  • 5. Hotel-Reception System (HRS) Sistema di registrazione di nuovi ospiti presso un hotel Per un ospite sono previsti i seguenti servizi: Assegnazione di una camera vuota Possibilit di posto auto presso una struttura convenzionata Possibilit di usufruire del Kit di benvenuto se in possesso della Carta Vip
  • 6. Cosa si intende per validazione?
  • 7. Significato di validazione Processo atto a verificare che particolari requisiti siano soddisfatti da uno specifico elemento o da un insieme I requisiti sono caratteristiche proprie del sistema che si sta considerando Obiettivo: mantenere lintegrit di un sistema!!
  • 8. Validazione nel mondo DDD Particolari requisiti da soddisfare: Regole di business legate al dominio Verifica dei requisiti per un elemento: Applicazione di regole a entit, value object e aggregati
  • 9. Esempi di regole in HRS Un ospite per registrarsi deve fornire i propri dati anagrafici: Nome Cognome Numero di documento Se in possesso della Carta Vip allora avr accesso al Kit di Benvenuto
  • 11. Tutte le regole sono sempre valide? dipende E possibile suddividere la validazione in due macrocategorie: Validazione i稼厩温姻庄温稼岳艶 Validazione c看稼岳艶壊岳顎温鉛艶
  • 12. Validazione Invariante Vincoli che rappresentanto delle caratteristiche proprie di unentit o di un value object e fanno parte del suo comportamento Deve sempre essere rispettata!!! Esempio in HRS: Un ospite DEVE avere nome, cognome e un documento di identificazione Il numero di documento DEVE essere univoco
  • 13. Validazione Contestutale Non comprende vincoli obbligatori Viene valutata solamente in determinate situazioni legati a contesti o ad azioni specifiche Viene valutata ogni volta che si esegue lazione o si entra nel contesto Esempio in HRS: Un ospite potr avere il Kit di Benvenuto allarrivo solo in possesso di una Carta Vip
  • 14. Tecniche di validazione i稼厩温姻庄温稼岳艶
  • 15. Approccio Always Valid Verifica delle regole alla creazione dellentit/value object e ad ogni operazione che pu嘆 alterarne lo stato Conseguenze: Lo stato degli oggetti non 竪 MAI inconsistente Quando gli elementi interagiscono tra di loro non 竪 necessario verificare nuovamente i vincoli invarianti
  • 16. Always Valid: creazione degli oggetti La creazione delle entit/value object deve impedire di ottenere delle istanze non valide Utilizzo di Factory o di Factory-Methods
  • 17. Always Valid: operazioni di modifica Ogni operazione deve verificare i vincoli invarianti e fallire nel caso in cui non vengano rispettati Evitare di utilizzare i setters per modificare i valori dellentit/value object Ricorrere a metodi che rappresentano le operazioni espresse dallubiquitous language
  • 18. Approccio Valid on demand Verifica delle regole effettuata alla chiamata di un metodo di validazione che pu嘆 appartenere alla classe oppure delegato ad un validatore esterno Conseguenze: DEVE sempre essere richiamata prima di ogni operazione che coinvolge lelemento
  • 19. Quale tecnica utilizzare? Essendo vincoli invarianti ha senso creare un oggetto senza che essi siano rispettati? Esempio in HRS: Pu嘆 esistere un ospite senza documento? Ha senso modificare lanagrafica di un ospite inserendo nome vuoto? Lentit/value object verr validata prima di ogni operazione che la/lo coinvolge? Esempio in HRS: Verificare che lospite sia valido prima di effettuare la richiesta per il posto auto La risposta 竪...NO => ALWAYS VALID!!
  • 20. Tecniche di validazione c看稼岳艶壊岳顎温鉛艶
  • 21. Implementazione validazione contestuale Consiste nella valutazione di condizioni in un contesto specifico Esempio in HRS: Se un ospite ha la Carta Vip 竪 un ospite Vip ed ha diritto a servizi speciali (Kit di Benvenuto) In pratica: Specification
  • 23. Che la validazione sia con voi!
  • 24. Grazie a tutti!! I miei riferimenti: Email: andrea@canegrati.net Blog: http://blogs.ugidotnet.org/darthdog/