SlideShare a Scribd company logo
Domain Driven Design: Overview 
Speaker: Giancarlo Sudano
About me: 
Giancarlo Sudano (alias janky) 
Software Architect in Objectway 
Fondatore di GUISA 
www.guisa.org 
Blog su Ugidotnet: 
http://blogs.ugidotnet.org/janky 
Email: 
giancarlo.sudano@gmail.com 
giancarlo.sudano@objectway.it
Agenda 
• Domain Model 
• Domain Driven Design 
• Conceptual Map 
• Layering 
• Esempi reali: Web Client Software Factory
DOMAIN MODEL
Un po di discipline...
Business Requirement 
Business Requirement 
Use Case Model 
Processo di 
vendita 
(testo) 
Processo 
d’Ordine 
(testo)
Business Modeling 
Use Case Model 
Processo di 
vendita 
(testo) 
Processo 
d’Ordine 
(testo) 
Business Modeling 
Domain Model 
Order 
Custome 
r 
Product 
1 
1..* 
1..* 
Business Requirement 
Gli Use case, i termini, i 
concetti ispirano il 
Domain Model
Software Design 
Business Modeling Software Design 
Domain Model Object Model 
Order 
Custome 
r 
Product 
1 
1..* 
1..* 
I concetti del Dominio 
ispirano nomi e 
comportamenti delle classi 
del software
Design del Domain Layer 
Classificazione fatta da Fowler [PoEAA 2004] 
Transaction Script: 
Principalmente il layer sarà modellato con delle procedure che prendono 
l’input dal layer di presentation, li processano e eventualmente trasmettono 
manipolazioni sui database. 
Table Module: 
Serie di classi che gestiscono la logica di business 
per tutte le righe sul database di una particolare entità. 
Domain Model: 
Serie di classi ispirate al modello analitico che gestiscono 
sia stato che comportamento. Una singola istanza rappresenta una singola entità.
Riepilogo delle definizioni 
• Modello analitico: concettualizzazione del problema di 
business 
• Domain Layer: Strato di software che rappresenta 
l’implementazione del modello analitico 
• Domain Layer patterns: metodologie per implementare i 
problemi di business 
– Transaction script 
– Table Module 
– Domain Model
DOMAIN DRIVEN DESIGN
...tutto cominciò... 
• Formalizzazione fatta da Eric Evans 2003/04 nel 
suo libro 
“Domain Driven Design: 
Tackling Complexity In The Heart Of Software” 
• Scopo del libro: 
– “…To describe and build a vocabulary about the very art 
of domain modeling…”
Domain Driven Design: Il portale 
• http://domaindrivendesign.org 
– Informazioni 
– Interviste 
– Articoli 
– Discussioni 
– Case Stories 
– Esempi
Domain Driven Design: Definizione 
 La DDD è un mindset, cioè una serie di principi e 
priorità, atte ad accelerare la progettazione software 
che ha a che fare con domini di particolare 
complessità.
Presupposti per la nascita di DDD 
• Il modello analitico (cioè il risultato del lavoro degli 
analisti) è uno strumento di sola comprensione. 
• Un analista poi può usare UML per la visualizzazione del 
modello stesso. 
• Il modello non porterà nessun dettaglio implementativo 
ai fini di non inquinare la comprensione.
Quindi... 
• l'implementazione di un modello molte volte può 
allontanarsi notevolmente dalla sua iniziale descrizione. 
• La Domain Driven Design è una disciplina di 
progettazione atta quindi a tenere costantemente 
vicini/connessi il modello analitico che il modello 
implementativo.
Esempio classico di discostamento
La prima Conceptual Map di DDD
Entity e ValueObject
Entity Value Object 
Semantica Semantica di Reference: 
Una Fattura, un Ordine, un Cliente 
Semantica di Valore: 
Un Indirizzo, una Coordinata 3D, un 
Numero Complesso 
Life cycle Indipendente Coincidente con l’oggetto a cui 
appartiene 
Uso Una Entity tende a memorizzare uno 
stato, esporre comportamenti e 
coordinare altre entity/value object 
associati 
Un value object tende a memorizzare 
uno stato 
Uguaglianza Basata sull’identità. 
Cioè dal confronto di uno (o più) 
attributi specifici che la 
rappresentano univocamente. 
Basata sul confronto di tutti i suoi 
attributi. 
Rappresentazione nel 
modello Object 
Oriented 
Una Classe Una Classe (o uno Struct) 
Rappresentazione nel 
modello relazionale 
Una (o più) tabelle Una (o più) colonne di una tabella
Troppa logica nelle entity? 
In generale si tende ad aggiungere solo i metodi 
essenziali ad una entity. 
Inserire troppa logica all’interno di una entity: 
+ Complessità 
- Manutenibilità 
- Chiarezza, Espressività
Service 
Una classe Service modella, non tanto una entità di dominio, 
ma una regola di business 
Qualcosa che il software “deve fare” (operazione) e che non 
necessariamente coincide con uno stato
Business Rules 
Restrictions: 
Un cliente non può inserire più di tre richieste d’ordine caricate sul suo credit account. 
Heuristics: 
Gli ordini di un cliente con uno stato preferenziale verranno evasi immediatamente. 
Computations: 
Il volume di ordini annuale di un cliente deve essere calcolato dal totale delle vendite chiuse entro la 
chiusura dell’anno fiscale aziendale. 
Inference: 
Un cliente deve essere considerato preferenziale se ha almeno 5 ordini superiori a 1000 euro. 
Timing: 
Un cliente verrà archiviato se non effettua ordini per 36 mesi consecutivi. 
Triggers: 
Quando un ordine è stato spedito, una notifica di “Send advance” deve essere notificata ad una serie di 
sottoscritti
Tipi di Services 
Tipologie di Servizi Esempi 
Infrastrutturali •Spedizione di una Mail 
•Persistenza di una entity in uno storage 
•Tracciamento delle operazioni di una 
Entity 
Applicativi (o di 
dominio) 
•Trasferimento di valuta tra conti bancari 
•Approvazione di un Ordine d’acquisto 
•Validazione di Entity a fronte di una 
operazione di business
Come distribuire logica tra 
Service e Entity? 
Una Entity con troppe responsabilità rischia di perdere in 
chiarezza concettuale. 
Entity troppo cariche sono di difficile manutenzione, 
refactoring e testing. 
Le operazioni di business, sono spesso legate ad altre 
entity. Esprimere queste operazioni come metodo di una 
Entity, aumenta la sua dipendenza da altri oggetti
Service dipendenti da classi 
(non da id)
Factory 
Responsabilità di creare e assemblare oggetti 
particolarmente complessi. 
La logica di creazione di grafi immersa nel costruttore 
stesso, potrebbe non essere una “buona idea”.
Repository 
Responsabilità del ciclo di vita delle Entity. 
Responsabilità infrastrutturali di persistenza quali Identity 
Map, Cache.
LAYERING
Contesto classico 
• Isolare il codice dalla interfaccia utente 
• Isolare il codice di accesso al database
Soluzione classica 
Presentation 
Business Logic 
Data Access
WinForm 
Soluzione classica 
Compact 
Framework 
Web Form WPF Form 
Business Logic 
Data Access 
(database A) 
Data Access 
(database B)
Non se ne può più...andiamo 
oltre 
• Dominio 
Requisiti più alti 
– Domain Model quanto più indipendente da tutte le altre parti del sistema. 
– E’ buona norma rendere il DM facilmente testabile, modificabile. 
– Minimizzare la dipendenza anche dalle API di .NET. 
• Presentation Layer 
– Riutilizzo più pesante del codice tra una Presentation Layer ed un altro 
– Migliorare le capacità di Test delle View e della logica di Flusso 
• Servizi: 
– Distinzione tra servizi infrastrutturali e applicativi
Isolamento: Layering 
User Interface (Presentation Layer) 
Responsible for presenting information to the user and 
interpreting user commands. 
Application Layer 
This is a thin layer which coordinates the application 
activity. It does not contain business logic. It does not 
hold the state of the business objects, but it can hold 
the state of an application task progress. 
Domain Layer 
This layer contains information about the domain. This 
is the heart of the business software. The state of 
business objects is held here. Persistence of the 
business objects and possibly their state is delegated to 
the infrastructure layer. 
Infrastructure Layer 
This layer acts as a supporting library for all the other 
layers. It provides communication between layers, 
implements persistence for business objects, contains 
supporting libraries for the user interface layer, etc.
Soluzione 
Presentation 
UI Process 
Business Logic 
Data Access 
Coordina le attività 
dell’applicazione. 
Non contiene logica di 
business. 
Non gestisce lo stato delle 
Entity, ma gestisce lo stato 
dell’applicazione e dei 
progresso dei task 
Può eseguire Processi di 
Business e Servizi in 
seguito a comandi dalla UI 
o a Eventi Esterni
Confusioni sui nomi di layer? 
Presentation 
UI Process 
Business 
Data Access 
Presentation 
Controller/ 
Mediator 
Domain 
Data Access 
Presentation 
Application 
Controller 
Domain 
Data Source 
Presentation 
Application 
Domain 
Infrastructure 
= 
= 
= 
= 
Brown Martin Fowler Eric Evans 
DNA, J2EE 
Presentation 
... 
Business 
Data Access
Soluzione 
Presentation 
UI Process 
Data Access 
Business Rules 
Entity (detto anche Core) 
Security Service Altri Service 
Business Process 
Validations
Soluzione 
Presentation 
UI Process 
Data Access 
Business Rules 
Entity (detto anche Core) 
Security Service Altri Service 
Business Process 
Validations
Service Gateway 
Layered Applications
Presentation Layer 
UserInterface Process Layer 
CAB , CWAB, Acropolis , 
MonoRail, Workflow Foundation 
Service Layer 
ORM 
NHibernate, Linq to SQL, Genome 
Dependency Injection Framework 
(Spring.NET, Windsor) 
Legacy WebServices LDAP EnterpriseServices Database 
AOP Framework 
Spring.net, Policy Injection Application Block 
Business Process Layer 
Workflow Foundation, BizTalk, 
Spring Validation, Validation Application Block 
DataAccess Layer 
CrossCutting Utility Class 
Exception Handling, Logging, Security 
Authorization 
Domain Layer 
Authentication 
Log e Trace 
Transaction 
Management
ALTRE NAVIGATION MAPS
Supple Design Patterns 
Eric Evans: Domain Driven Design [2006]
Model Integrity Patterns 
Eric Evans: Domain Driven Design [2006]
Riferimenti 
• Libro: Domain Driven Design: Tackling Complexity In The 
Heart Of Software 
[Eric Evans 2003] 
• Libro: Applying Domain-Driven Design and Patterns 
[Jimmy Nilsson 2006] 
• Libro: Domain Driven Design Quickly 
[InfoQ 2006] (gratuito, scaricabile da internet) 
• http://domaindrivendesign.org/ 
• Seguite il mio blog: 
iniziativa: “Domain Model e Enterprise Application”

More Related Content

What's hot

Building Business & IT Architecture Roadmaps with ArchiMate & TOGAF
Building Business & IT Architecture Roadmaps with ArchiMate & TOGAFBuilding Business & IT Architecture Roadmaps with ArchiMate & TOGAF
Building Business & IT Architecture Roadmaps with ArchiMate & TOGAF
Corso
 
Enterprise Architecture & Project Portfolio Management 1/2
Enterprise Architecture & Project Portfolio Management 1/2Enterprise Architecture & Project Portfolio Management 1/2
Enterprise Architecture & Project Portfolio Management 1/2
Jean Gehring
 
Introduction to Solution Architecture Book
Introduction to Solution Architecture BookIntroduction to Solution Architecture Book
Introduction to Solution Architecture Book
Alan McSweeney
 
QAI -ITSM Practice Presentation
QAI -ITSM Practice PresentationQAI -ITSM Practice Presentation
QAI -ITSM Practice PresentationQAIites
 
도메인 주도 설계 - 16 대규모 구조
도메인 주도 설계 - 16 대규모 구조도메인 주도 설계 - 16 대규모 구조
도메인 주도 설계 - 16 대규모 구조SH Park
 
EA Intensive Course "Building Enterprise Architecture" by mr.danairat
EA Intensive Course "Building Enterprise Architecture" by mr.danairatEA Intensive Course "Building Enterprise Architecture" by mr.danairat
EA Intensive Course "Building Enterprise Architecture" by mr.danairat
Software Park Thailand
 
IQBBA® - Foundation Level Business Analyst
IQBBA® - Foundation Level Business AnalystIQBBA® - Foundation Level Business Analyst
Modernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxModernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptx
Ed Charbeneau
 
Architecture Governance in Brief
Architecture Governance in BriefArchitecture Governance in Brief
Architecture Governance in Brief
Anthony Dehnashi
 
Solution Architecture
Solution ArchitectureSolution Architecture
Solution Architecture
FirmansyahIrma1
 
Clean architecture
Clean architectureClean architecture
Clean architecture
Travis Frisinger
 
Digital Reference Architecture- A FOCUS ON MIDDLEWARE “THE KILLER APP”
Digital Reference Architecture-  A FOCUS ON MIDDLEWARE “THE KILLER APP”Digital Reference Architecture-  A FOCUS ON MIDDLEWARE “THE KILLER APP”
Digital Reference Architecture- A FOCUS ON MIDDLEWARE “THE KILLER APP”
Kellton Tech Solutions Ltd
 
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overviewEnterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Winton Winton
 
Togaf 9.2 Introduction
Togaf 9.2 IntroductionTogaf 9.2 Introduction
Togaf 9.2 Introduction
Mohamed Zakarya Abdelgawad
 
Software architecture
Software architectureSoftware architecture
Software architecture
nazn
 
Business Architecture Explained
Business Architecture ExplainedBusiness Architecture Explained
Business Architecture Explained
aaronwilliamson
 
Solution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman ShramkovSolution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman Shramkov
JavaDayUA
 
What is Enterprise Architecture?
What is Enterprise Architecture?What is Enterprise Architecture?
What is Enterprise Architecture?
Brett Colbert
 
Itil Mind Maps
Itil Mind MapsItil Mind Maps
Itil Mind Maps
Lyju Thomas
 
Agile Solution Architecture and Design
Agile Solution Architecture and DesignAgile Solution Architecture and Design
Agile Solution Architecture and Design
Alan McSweeney
 

What's hot (20)

Building Business & IT Architecture Roadmaps with ArchiMate & TOGAF
Building Business & IT Architecture Roadmaps with ArchiMate & TOGAFBuilding Business & IT Architecture Roadmaps with ArchiMate & TOGAF
Building Business & IT Architecture Roadmaps with ArchiMate & TOGAF
 
Enterprise Architecture & Project Portfolio Management 1/2
Enterprise Architecture & Project Portfolio Management 1/2Enterprise Architecture & Project Portfolio Management 1/2
Enterprise Architecture & Project Portfolio Management 1/2
 
Introduction to Solution Architecture Book
Introduction to Solution Architecture BookIntroduction to Solution Architecture Book
Introduction to Solution Architecture Book
 
QAI -ITSM Practice Presentation
QAI -ITSM Practice PresentationQAI -ITSM Practice Presentation
QAI -ITSM Practice Presentation
 
도메인 주도 설계 - 16 대규모 구조
도메인 주도 설계 - 16 대규모 구조도메인 주도 설계 - 16 대규모 구조
도메인 주도 설계 - 16 대규모 구조
 
EA Intensive Course "Building Enterprise Architecture" by mr.danairat
EA Intensive Course "Building Enterprise Architecture" by mr.danairatEA Intensive Course "Building Enterprise Architecture" by mr.danairat
EA Intensive Course "Building Enterprise Architecture" by mr.danairat
 
IQBBA® - Foundation Level Business Analyst
IQBBA® - Foundation Level Business AnalystIQBBA® - Foundation Level Business Analyst
IQBBA® - Foundation Level Business Analyst
 
Modernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptxModernizing Web Apps with .NET 6.pptx
Modernizing Web Apps with .NET 6.pptx
 
Architecture Governance in Brief
Architecture Governance in BriefArchitecture Governance in Brief
Architecture Governance in Brief
 
Solution Architecture
Solution ArchitectureSolution Architecture
Solution Architecture
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Digital Reference Architecture- A FOCUS ON MIDDLEWARE “THE KILLER APP”
Digital Reference Architecture-  A FOCUS ON MIDDLEWARE “THE KILLER APP”Digital Reference Architecture-  A FOCUS ON MIDDLEWARE “THE KILLER APP”
Digital Reference Architecture- A FOCUS ON MIDDLEWARE “THE KILLER APP”
 
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overviewEnterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
 
Togaf 9.2 Introduction
Togaf 9.2 IntroductionTogaf 9.2 Introduction
Togaf 9.2 Introduction
 
Software architecture
Software architectureSoftware architecture
Software architecture
 
Business Architecture Explained
Business Architecture ExplainedBusiness Architecture Explained
Business Architecture Explained
 
Solution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman ShramkovSolution Architecture tips & tricks by Roman Shramkov
Solution Architecture tips & tricks by Roman Shramkov
 
What is Enterprise Architecture?
What is Enterprise Architecture?What is Enterprise Architecture?
What is Enterprise Architecture?
 
Itil Mind Maps
Itil Mind MapsItil Mind Maps
Itil Mind Maps
 
Agile Solution Architecture and Design
Agile Solution Architecture and DesignAgile Solution Architecture and Design
Agile Solution Architecture and Design
 

Viewers also liked

Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)
DotNetMarche
 
DDD 2011 - Dove Desideriamo Dirigerci
DDD 2011 - Dove Desideriamo DirigerciDDD 2011 - Dove Desideriamo Dirigerci
DDD 2011 - Dove Desideriamo Dirigerci
Alberto Brandolini
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignAndrea Saltarello
 
BDD in DDD
BDD in DDDBDD in DDD
BDD in DDD
oehsani
 
Epic.NET: Processes, patterns and architectures
Epic.NET: Processes, patterns and architecturesEpic.NET: Processes, patterns and architectures
Epic.NET: Processes, patterns and architectures
Giacomo Tesio
 
Event based modeling - eng
Event based modeling - engEvent based modeling - eng
Event based modeling - eng
Alberto Brandolini
 
DDD e Validazione
DDD e ValidazioneDDD e Validazione
DDD e Validazione
Andrea Canegrati
 
Unleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayUnleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayDotNetMarche
 
Model storming
Model stormingModel storming
Model storming
Alberto Brandolini
 
Event storming recipes
Event storming recipesEvent storming recipes
Event storming recipes
Alberto Brandolini
 

Viewers also liked (10)

Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)
 
DDD 2011 - Dove Desideriamo Dirigerci
DDD 2011 - Dove Desideriamo DirigerciDDD 2011 - Dove Desideriamo Dirigerci
DDD 2011 - Dove Desideriamo Dirigerci
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
 
BDD in DDD
BDD in DDDBDD in DDD
BDD in DDD
 
Epic.NET: Processes, patterns and architectures
Epic.NET: Processes, patterns and architecturesEpic.NET: Processes, patterns and architectures
Epic.NET: Processes, patterns and architectures
 
Event based modeling - eng
Event based modeling - engEvent based modeling - eng
Event based modeling - eng
 
DDD e Validazione
DDD e ValidazioneDDD e Validazione
DDD e Validazione
 
Unleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayUnleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-Day
 
Model storming
Model stormingModel storming
Model storming
 
Event storming recipes
Event storming recipesEvent storming recipes
Event storming recipes
 

Similar to Introduzione al Domain Driven Design (DDD)

Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
Fabio Armani
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseAlberto Lagna
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)
Fabio Armani
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
Gian Maria Ricci
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
DotNetMarche
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
Manuel Scapolan
 
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...Emanuele Della Valle
 
Il mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveIl mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveEmanuele Della Valle
 
Biznology presentazione azienda
Biznology presentazione aziendaBiznology presentazione azienda
Biznology presentazione azienda
Alberto Lagna
 
BPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeBPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeemanuelemolteni
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
Sabino Labarile
 
SOA wonderful World
SOA wonderful WorldSOA wonderful World
SOA wonderful World
Francesco Arcieri
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
Francesca1980
 
Potenziare l'EA con il governo delle informazioni
Potenziare l'EA con il governo delle informazioniPotenziare l'EA con il governo delle informazioni
Potenziare l'EA con il governo delle informazioni
Matteo Busanelli
 
Cesvip 20110124
Cesvip 20110124Cesvip 20110124
Cesvip 20110124
Alessandro Grandi
 
SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006
SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006
SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006Emanuele Della Valle
 
iVision Software 2.3
iVision Software 2.3iVision Software 2.3
iVision Software 2.3
ivisionweb
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
Andrea Saltarello
 
Approccio Semantico alla Governance IT
Approccio Semantico alla Governance ITApproccio Semantico alla Governance IT
Approccio Semantico alla Governance IT
Matteo Busanelli
 

Similar to Introduzione al Domain Driven Design (DDD) (20)

Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterprise
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...
 
Il mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveIl mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettive
 
Biznology presentazione azienda
Biznology presentazione aziendaBiznology presentazione azienda
Biznology presentazione azienda
 
BPM e Cloud: la partnership ideale
BPM e Cloud: la partnership idealeBPM e Cloud: la partnership ideale
BPM e Cloud: la partnership ideale
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
SOA wonderful World
SOA wonderful WorldSOA wonderful World
SOA wonderful World
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
Potenziare l'EA con il governo delle informazioni
Potenziare l'EA con il governo delle informazioniPotenziare l'EA con il governo delle informazioni
Potenziare l'EA con il governo delle informazioni
 
Cesvip 20110124
Cesvip 20110124Cesvip 20110124
Cesvip 20110124
 
SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006
SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006
SWE-ET: la soluzione Italiana alla Semantic Web Service Challenge 2006
 
iVision Software 2.3
iVision Software 2.3iVision Software 2.3
iVision Software 2.3
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 
Approccio Semantico alla Governance IT
Approccio Semantico alla Governance ITApproccio Semantico alla Governance IT
Approccio Semantico alla Governance IT
 

More from DotNetMarche

Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
DotNetMarche
 
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
DotNetMarche
 
WPF 4 fun
WPF 4 funWPF 4 fun
WPF 4 fun
DotNetMarche
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
DotNetMarche
 
UI Composition
UI CompositionUI Composition
UI Composition
DotNetMarche
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
DotNetMarche
 
WPF basics
WPF basicsWPF basics
WPF basics
DotNetMarche
 
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyond
DotNetMarche
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
DotNetMarche
 
jQuery Loves You
jQuery Loves YoujQuery Loves You
jQuery Loves You
DotNetMarche
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
DotNetMarche
 
Open XML & MOSS
Open XML & MOSSOpen XML & MOSS
Open XML & MOSS
DotNetMarche
 
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-Learning
DotNetMarche
 
Installing and Administering MOSS
Installing and Administering MOSSInstalling and Administering MOSS
Installing and Administering MOSS
DotNetMarche
 
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical Overview
DotNetMarche
 
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc
DotNetMarche
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
DotNetMarche
 
Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
DotNetMarche
 
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpace
DotNetMarche
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
DotNetMarche
 

More from DotNetMarche (20)

Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
 
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
 
WPF 4 fun
WPF 4 funWPF 4 fun
WPF 4 fun
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
WPF basics
WPF basicsWPF basics
WPF basics
 
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyond
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
 
jQuery Loves You
jQuery Loves YoujQuery Loves You
jQuery Loves You
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Open XML & MOSS
Open XML & MOSSOpen XML & MOSS
Open XML & MOSS
 
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-Learning
 
Installing and Administering MOSS
Installing and Administering MOSSInstalling and Administering MOSS
Installing and Administering MOSS
 
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical Overview
 
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
 
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpace
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
 

Introduzione al Domain Driven Design (DDD)

  • 1. Domain Driven Design: Overview Speaker: Giancarlo Sudano
  • 2. About me: Giancarlo Sudano (alias janky) Software Architect in Objectway Fondatore di GUISA www.guisa.org Blog su Ugidotnet: http://blogs.ugidotnet.org/janky Email: giancarlo.sudano@gmail.com giancarlo.sudano@objectway.it
  • 3. Agenda • Domain Model • Domain Driven Design • Conceptual Map • Layering • Esempi reali: Web Client Software Factory
  • 5. Un po di discipline...
  • 6. Business Requirement Business Requirement Use Case Model Processo di vendita (testo) Processo d’Ordine (testo)
  • 7. Business Modeling Use Case Model Processo di vendita (testo) Processo d’Ordine (testo) Business Modeling Domain Model Order Custome r Product 1 1..* 1..* Business Requirement Gli Use case, i termini, i concetti ispirano il Domain Model
  • 8. Software Design Business Modeling Software Design Domain Model Object Model Order Custome r Product 1 1..* 1..* I concetti del Dominio ispirano nomi e comportamenti delle classi del software
  • 9. Design del Domain Layer Classificazione fatta da Fowler [PoEAA 2004] Transaction Script: Principalmente il layer sarà modellato con delle procedure che prendono l’input dal layer di presentation, li processano e eventualmente trasmettono manipolazioni sui database. Table Module: Serie di classi che gestiscono la logica di business per tutte le righe sul database di una particolare entità. Domain Model: Serie di classi ispirate al modello analitico che gestiscono sia stato che comportamento. Una singola istanza rappresenta una singola entità.
  • 10. Riepilogo delle definizioni • Modello analitico: concettualizzazione del problema di business • Domain Layer: Strato di software che rappresenta l’implementazione del modello analitico • Domain Layer patterns: metodologie per implementare i problemi di business – Transaction script – Table Module – Domain Model
  • 12. ...tutto cominciò... • Formalizzazione fatta da Eric Evans 2003/04 nel suo libro “Domain Driven Design: Tackling Complexity In The Heart Of Software” • Scopo del libro: – “…To describe and build a vocabulary about the very art of domain modeling…”
  • 13. Domain Driven Design: Il portale • http://domaindrivendesign.org – Informazioni – Interviste – Articoli – Discussioni – Case Stories – Esempi
  • 14. Domain Driven Design: Definizione  La DDD è un mindset, cioè una serie di principi e priorità, atte ad accelerare la progettazione software che ha a che fare con domini di particolare complessità.
  • 15. Presupposti per la nascita di DDD • Il modello analitico (cioè il risultato del lavoro degli analisti) è uno strumento di sola comprensione. • Un analista poi può usare UML per la visualizzazione del modello stesso. • Il modello non porterà nessun dettaglio implementativo ai fini di non inquinare la comprensione.
  • 16. Quindi... • l'implementazione di un modello molte volte può allontanarsi notevolmente dalla sua iniziale descrizione. • La Domain Driven Design è una disciplina di progettazione atta quindi a tenere costantemente vicini/connessi il modello analitico che il modello implementativo.
  • 17. Esempio classico di discostamento
  • 18. La prima Conceptual Map di DDD
  • 20. Entity Value Object Semantica Semantica di Reference: Una Fattura, un Ordine, un Cliente Semantica di Valore: Un Indirizzo, una Coordinata 3D, un Numero Complesso Life cycle Indipendente Coincidente con l’oggetto a cui appartiene Uso Una Entity tende a memorizzare uno stato, esporre comportamenti e coordinare altre entity/value object associati Un value object tende a memorizzare uno stato Uguaglianza Basata sull’identità. Cioè dal confronto di uno (o più) attributi specifici che la rappresentano univocamente. Basata sul confronto di tutti i suoi attributi. Rappresentazione nel modello Object Oriented Una Classe Una Classe (o uno Struct) Rappresentazione nel modello relazionale Una (o più) tabelle Una (o più) colonne di una tabella
  • 21. Troppa logica nelle entity? In generale si tende ad aggiungere solo i metodi essenziali ad una entity. Inserire troppa logica all’interno di una entity: + Complessità - Manutenibilità - Chiarezza, Espressività
  • 22. Service Una classe Service modella, non tanto una entità di dominio, ma una regola di business Qualcosa che il software “deve fare” (operazione) e che non necessariamente coincide con uno stato
  • 23. Business Rules Restrictions: Un cliente non può inserire più di tre richieste d’ordine caricate sul suo credit account. Heuristics: Gli ordini di un cliente con uno stato preferenziale verranno evasi immediatamente. Computations: Il volume di ordini annuale di un cliente deve essere calcolato dal totale delle vendite chiuse entro la chiusura dell’anno fiscale aziendale. Inference: Un cliente deve essere considerato preferenziale se ha almeno 5 ordini superiori a 1000 euro. Timing: Un cliente verrà archiviato se non effettua ordini per 36 mesi consecutivi. Triggers: Quando un ordine è stato spedito, una notifica di “Send advance” deve essere notificata ad una serie di sottoscritti
  • 24. Tipi di Services Tipologie di Servizi Esempi Infrastrutturali •Spedizione di una Mail •Persistenza di una entity in uno storage •Tracciamento delle operazioni di una Entity Applicativi (o di dominio) •Trasferimento di valuta tra conti bancari •Approvazione di un Ordine d’acquisto •Validazione di Entity a fronte di una operazione di business
  • 25. Come distribuire logica tra Service e Entity? Una Entity con troppe responsabilità rischia di perdere in chiarezza concettuale. Entity troppo cariche sono di difficile manutenzione, refactoring e testing. Le operazioni di business, sono spesso legate ad altre entity. Esprimere queste operazioni come metodo di una Entity, aumenta la sua dipendenza da altri oggetti
  • 26. Service dipendenti da classi (non da id)
  • 27. Factory Responsabilità di creare e assemblare oggetti particolarmente complessi. La logica di creazione di grafi immersa nel costruttore stesso, potrebbe non essere una “buona idea”.
  • 28. Repository Responsabilità del ciclo di vita delle Entity. Responsabilità infrastrutturali di persistenza quali Identity Map, Cache.
  • 30. Contesto classico • Isolare il codice dalla interfaccia utente • Isolare il codice di accesso al database
  • 31. Soluzione classica Presentation Business Logic Data Access
  • 32. WinForm Soluzione classica Compact Framework Web Form WPF Form Business Logic Data Access (database A) Data Access (database B)
  • 33. Non se ne può più...andiamo oltre 
  • 34. • Dominio Requisiti più alti – Domain Model quanto più indipendente da tutte le altre parti del sistema. – E’ buona norma rendere il DM facilmente testabile, modificabile. – Minimizzare la dipendenza anche dalle API di .NET. • Presentation Layer – Riutilizzo più pesante del codice tra una Presentation Layer ed un altro – Migliorare le capacità di Test delle View e della logica di Flusso • Servizi: – Distinzione tra servizi infrastrutturali e applicativi
  • 35. Isolamento: Layering User Interface (Presentation Layer) Responsible for presenting information to the user and interpreting user commands. Application Layer This is a thin layer which coordinates the application activity. It does not contain business logic. It does not hold the state of the business objects, but it can hold the state of an application task progress. Domain Layer This layer contains information about the domain. This is the heart of the business software. The state of business objects is held here. Persistence of the business objects and possibly their state is delegated to the infrastructure layer. Infrastructure Layer This layer acts as a supporting library for all the other layers. It provides communication between layers, implements persistence for business objects, contains supporting libraries for the user interface layer, etc.
  • 36. Soluzione Presentation UI Process Business Logic Data Access Coordina le attività dell’applicazione. Non contiene logica di business. Non gestisce lo stato delle Entity, ma gestisce lo stato dell’applicazione e dei progresso dei task Può eseguire Processi di Business e Servizi in seguito a comandi dalla UI o a Eventi Esterni
  • 37. Confusioni sui nomi di layer? Presentation UI Process Business Data Access Presentation Controller/ Mediator Domain Data Access Presentation Application Controller Domain Data Source Presentation Application Domain Infrastructure = = = = Brown Martin Fowler Eric Evans DNA, J2EE Presentation ... Business Data Access
  • 38. Soluzione Presentation UI Process Data Access Business Rules Entity (detto anche Core) Security Service Altri Service Business Process Validations
  • 39. Soluzione Presentation UI Process Data Access Business Rules Entity (detto anche Core) Security Service Altri Service Business Process Validations
  • 40. Service Gateway Layered Applications
  • 41. Presentation Layer UserInterface Process Layer CAB , CWAB, Acropolis , MonoRail, Workflow Foundation Service Layer ORM NHibernate, Linq to SQL, Genome Dependency Injection Framework (Spring.NET, Windsor) Legacy WebServices LDAP EnterpriseServices Database AOP Framework Spring.net, Policy Injection Application Block Business Process Layer Workflow Foundation, BizTalk, Spring Validation, Validation Application Block DataAccess Layer CrossCutting Utility Class Exception Handling, Logging, Security Authorization Domain Layer Authentication Log e Trace Transaction Management
  • 43. Supple Design Patterns Eric Evans: Domain Driven Design [2006]
  • 44. Model Integrity Patterns Eric Evans: Domain Driven Design [2006]
  • 45. Riferimenti • Libro: Domain Driven Design: Tackling Complexity In The Heart Of Software [Eric Evans 2003] • Libro: Applying Domain-Driven Design and Patterns [Jimmy Nilsson 2006] • Libro: Domain Driven Design Quickly [InfoQ 2006] (gratuito, scaricabile da internet) • http://domaindrivendesign.org/ • Seguite il mio blog: iniziativa: “Domain Model e Enterprise Application”