I principi del Domain Driven Design applicati attraverso l'architettura CQRS.
1 of 43
More Related Content
Domain Driven Design e CQRS
1. 赫庄看厩艶糸━, 21 giugno 2012
Speaker: Manuel Scapolan
2. Domain Driven
Design
E¨ un insieme di principi che ci
aiutano a non fallire nel processo
di sviluppo di un software *
* considerando tutte le fasi del ciclo di vita!
3. Alcuni dei pi┫ grandi
fallimenti della storia:
Sources: Business Week, CEO Magazine,
Computerworld, InfoWeek, Fortune, The
New York Times, Time, and The Wall
Street Journal.
8. Ubiquitous Language
E¨ importante conoscere e utilizzare lo
stesso vocabolario degli esperti di
dominio (domain experts) per poterlo
poi condividere a tutti i livelli,
fino al codice!
9. Parlare tutti lo stesso
linguaggio dall¨esperto di
dominio, all¨analista fino
allo sviluppatore, significa
portare nel codice i
termini comunemente
utilizzati dal business.
Vuol dire che devo scrivere
il codice in italiano???
In nome dell¨Ubiquitous
Language pu┛ essere
necessario ´
10. Domain Model
La conoscenza deve essere tradotta in
un modello concettuale il pi┫ possibile
fedele alla realt┐ da rappresentare
secondo lo scopo dell¨applicazione che
ne deve fare uso
11. Domain Model Pattern
^An object model of the domain that
incorporates both behavior and data ̄
Martin Fowler
PoEAA
12. Mi stai forse dicendo che
fare Domain-Driven
Design significa realizzare
un modello ad oggetti che
rifletta la realt┐ che
l¨applicazione dovr┐
gestire?
Non lo facevamo gi┐
questo con l¨OOP?
Ci sono forse delle
indicazioni su come devo
disegnare le mie classi?
14. Entities
Elementi del dominio identificati in modo
univoco indipendentemente dai valori dei loro
attributi che possono variare nel tempo
public class Order : IEquatable<Order>
{
public bool Equals(Order other)
{
return this.Id.Equals(other.Id);
}
}
15. Value Objects
Elementi del dominio identificati attraverso
l¨insieme dei loro attributi, generalmente
immutabili, l¨unico cambiamento ┬ dato dalla
completa sostituzione (no side-effect)
public class ShippingAddress : IEquatable< ShippingAddress >
{
public bool Equals(ShippingAddress other)
{
return this.Street.Equals(other. Street)
&& this.PostCode.Equals(other.PostCode)
&& this.City.Equals(other.City);
}
}
17. L¨aggregato segue alla
perfezione la regola
dell¨incapsulamento in
quanto le entit┐ e i value
object che lo compongono
non possono essere
acceduti direttamente, ma
devono essere manipolati
attraverso l¨entit┐ definita
come aggregate root.
Ma allora come faccio
l¨accesso ai dati?
24. Read Model
Per le informazioni in sola lettura
(come ad esempio quelle statistiche)
possiamo usare un modello costruito
appositamente per velocizzare
ricerche, query e filtri
Ad esempio tra le classi di questo modello potrei avere
BestSellerProductItem e BestSellerProductView
28. ^Every method should either be a
command that performs an action, or a
query that returns data to the caller, but
not both. ̄
Command-query separation (CQS) principle,
Bertrand Meyer
29. Il Domain Model conserva
e gestisce la logica di
business con tutte le sue
regole. Se pensiamo alle
modifiche da applicare al
modello sono sempre il
frutto di una particolare
Domain Model richiesta o task.
Ogni richiesta pu┛ essere
benissimo tradotta
nell¨esecuzione di un
comando ben preciso.
35. Nella parte dedicata al
Read Model una serie di
event handlers catturano
gli eventi del Domain
Model invocando dei
componenti chiamati
^Denormalizer ̄ che
scompongono le
informazioni trasmesse
dall¨evento e le utilizzano
per aggiornare il database Read Model
dedicato alla lettura.
36. ´ e come fa l¨evento a raggiungere il
suo handler?
40. Event Sourcing
Se facciamo in modo che nell¨evento ci sia
la logica di applicazione delle modifiche
possiamo pensare di salvare gli eventi e
avere cos━ un sistema che mi permetta di
ricostruire lo stato di un aggregato a
partire da una serie di eventi
42. Credits
Le immagini contenute in questa presentazione delle
quali non ┬ stata esplicitata la provenienza hanno
licenza Creative Commons
際際滷 1: http://www.flickr.com/photos/26429107@N03/2508680764/
際際滷 12: http://www.flickr.com/photos/14456988@N00/5730592664
際際滷 17: http://www.flickr.com/photos/39384443@N00/3278857246/
43. Thank You MANUEL SCAPOLAN
website: www.manuelscapolan.it
twitter: manuelscapolan
e-mail: info@manuelscapolan.it