24
DDD e validazione Andrea Canegrati

DDD e Validazione

Embed Size (px)

Citation preview

Page 1: DDD e Validazione

DDD e validazione

Andrea Canegrati

Page 2: DDD e Validazione

Grazie!

Page 3: DDD e Validazione

Agenda

• Cosa si intende per validazione

• Validazione nel “contesto” DDD

• Diverse tipologie di validazione

– Validazione invariante

– Validazione contestuale

• Tecniche di validazione a confronto

Page 4: DDD e Validazione

Un caso “reale”

Page 5: DDD e Validazione

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”

Page 6: DDD e Validazione

Cosa si intende per

validazione?

Page 7: DDD e 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 l’integrità di un sistema!!

Page 8: DDD e Validazione

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

Page 9: DDD e Validazione

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

Page 10: DDD e Validazione

Tipologie di validazione

Page 11: DDD e Validazione

Tutte le regole sono

sempre valide? • …dipende

• E’ possibile suddividere la validazione in due

macrocategorie:

– Validazione “invariante”

– Validazione “contestuale”

Page 12: DDD e Validazione

Validazione Invariante

• Vincoli che rappresentanto delle caratteristiche

proprie di un’entità 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

Page 13: DDD e Validazione

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 l’azione o

si entra nel contesto

• Esempio in HRS:

–Un ospite potrà avere il Kit di Benvenuto all’arrivo

solo in possesso di una Carta Vip

Page 14: DDD e Validazione

Tecniche di validazione

“invariante”

Page 15: DDD e Validazione

Approccio “Always Valid”

• Verifica delle regole alla creazione

dell’entità/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

Page 16: DDD e Validazione

“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

Page 17: DDD e Validazione

“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 dell’entità/value object

• Ricorrere a metodi che rappresentano le operazioni espresse dall’ubiquitous language

Page 18: DDD e Validazione

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 l’elemento

Page 19: DDD e Validazione

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 l’anagrafica di un ospite inserendo nome vuoto?

• L’entità/value object verrà validata prima di ogni operazione che la/lo coinvolge?

• Esempio in HRS:

– Verificare che l’ospite sia valido prima di effettuare la richiesta per il posto auto

• La risposta è...NO => ALWAYS VALID!!

Page 20: DDD e Validazione

Tecniche di validazione

“contestuale”

Page 21: DDD e Validazione

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

Page 22: DDD e Validazione

DEMO SLIDE

HRS in Action!

Page 23: DDD e Validazione

Che la validazione sia con

voi!

Page 24: DDD e Validazione

Grazie a tutti!!

I miei riferimenti:

• Email: [email protected]

• Blog: http://blogs.ugidotnet.org/darthdog/