Quando un'entit pu嘆 essere considerata valida? Come effettuare la validazione? Lo scopo della sessione 竪 quello di illustrare e condividere alcune considerazioni relative a diversi approcci, facendo distinzione tra validazione "costante", quindi strettamente legata alle entit, e quelle che invece sono le validazioni appartenenti ad un contesto specifico. Verr presentato l'approccio "always-valid" e messo a confronto con il classico metodo "IsValid()".
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
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
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!!
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