SlideShare une entreprise Scribd logo
1  sur  28
Uno sguardo a CQRS ed eventsourcing Alessandro Melchiori alessandro@codiceplastico.com http://blogs.ugidotnet.org/amelchiori http://twitter.com/amelchiori
Domain Model An object model of the domain thatincorporatesbothbehavior and data [Martin Fowler- http://martinfowler.com/eaaCatalog/domainModel.html]
Un’architettura per tutti i gusti… DTO Presentation Layer Remote Facade ORM Application Service DTO Domain Model
Domain Model Class F Class D Class A ClassB ClassB ClassB IList<ClassE> IList<ClassE> IList<ClassC> IList<ClassA> Class B … Class G Class C ClassD … Class E IList<ClassC> ClassB
Domain Driven Design Use AGGREGATES asunit of consistencyacrossyour domain model Protectyour model with clearlydefined BOUNDED CONTEXT Il mio amico Eric Evans 
Un’architettura per tutti i gusti… DTO Presentation Layer Remote Facade ORM Application Service DTO Domain Model
Aggregate e BoundedContext Class A Class D ClassB ClassB IList<ClassC> Class B Class B … … Class C …
Domain Events It’sreallybecomeclear to me in the last couple of yearsthatweneed a new building block and thatis  the Domain Events Sempre il mio amico Eric Evans 
Domain Events Class A Class D ClassB ClassB IList<ClassC> Class B Class B … … Class C …
Qual è il problema? Edit DTO in UI ,[object Object]
Aggiunta di una property sul DTO
Aggiuntadella property sul DM
Mapping tra DTO e DM
Mapping ORM
Aggiunta campo sul DBSend DTO to server Map DTO to model Save model to DB BORING!!!!
Qual è il problema? A single model cannot be appropriate for reporting, searching and transactionalbehavior Greg Young, 2008
…ripartiamo da qui… DTO Remote Facade ORM Application Service DTO Presentation Layer Domain Model
…ripartiamo da qui… ,[object Object]
Abbiamo necessariamente bisogno di un “modello”?
Abbiamo bisogno di integrità referenziale e normalizzazione?
Possiamo accontentarci di dati “quasi” istantaneamente aggiornati?Presentation Layer
…ripartiamo da qui… DTO Presentation Layer Remote Facade ORM Application Service DTO Domain Model
…ripartiamo da qui… ,[object Object]
Il domain model deve sempre essere in uno stato consistenteDomain Model
Commandqueryseparation Every method should either be a command that performs an action, or a query that returns data to the caller, but NOT BOTH. Bertrand Meyer
CQRS WRITE Remote Facade Remote Facade App. Service ORM Command Query DM Presentation Layer Thin read layer Result READ
CQRS Remote Facade Remote Facade App. Service ORM Command Query DM Events Presentation Layer Thin read layer Result
CQRS Gli aggregate root ricevono Command e pubblicano eventi L’aggiornamento della base dati in lettura avviene tramite la gestione degli eventi Tutte le query impattano su una base dati “dedicata” e non coinvolgono il domain model Separazione delle competenze

Contenu connexe

Similaire à Uno sguardo a CQRS ed EventSourcing

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
Alberto Lagna
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
 
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
gwalter85
 
Modernize Legacy Systems with Kubernetes
Modernize Legacy Systems with KubernetesModernize Legacy Systems with Kubernetes
Modernize Legacy Systems with Kubernetes
Giulio Roggero
 
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
 
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
Andrea Saltarello
 

Similaire à Uno sguardo a CQRS ed EventSourcing (20)

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
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
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)
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
SQL Server & GDPR
SQL Server & GDPRSQL Server & GDPR
SQL Server & GDPR
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Azure functions
Azure functionsAzure functions
Azure functions
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
Modernize Legacy Systems with Kubernetes
Modernize Legacy Systems with KubernetesModernize Legacy Systems with Kubernetes
Modernize Legacy Systems with Kubernetes
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
Scenario Framework
Scenario FrameworkScenario Framework
Scenario Framework
 
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...
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 
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
 

Plus de Alessandro Melchiori

Plus de Alessandro Melchiori (20)

Scale your (aks) cluster, luke!
Scale your (aks) cluster, luke!Scale your (aks) cluster, luke!
Scale your (aks) cluster, luke!
 
A quick introduction to AKS
A quick introduction to AKSA quick introduction to AKS
A quick introduction to AKS
 
Developing reliable applications with .net core and AKS
Developing reliable applications with .net core and AKSDeveloping reliable applications with .net core and AKS
Developing reliable applications with .net core and AKS
 
VS Code tools for docker
VS Code tools for dockerVS Code tools for docker
VS Code tools for docker
 
Developing reliable applications with .net core and AKS
Developing reliable applications with .net core and AKSDeveloping reliable applications with .net core and AKS
Developing reliable applications with .net core and AKS
 
How to search...better! (azure search)
How to search...better! (azure search)How to search...better! (azure search)
How to search...better! (azure search)
 
AKS: k8s e azure
AKS: k8s e azureAKS: k8s e azure
AKS: k8s e azure
 
How to search...better!
How to search...better!How to search...better!
How to search...better!
 
A quick tour around Azure Dev Spaces
A quick tour around Azure Dev SpacesA quick tour around Azure Dev Spaces
A quick tour around Azure Dev Spaces
 
Azure functions: from a function to a whole application in 60 minutes
Azure functions: from a function to a whole application in 60 minutesAzure functions: from a function to a whole application in 60 minutes
Azure functions: from a function to a whole application in 60 minutes
 
Aks: k8s e azure
Aks:  k8s e azureAks:  k8s e azure
Aks: k8s e azure
 
Monitoring docker: from zero to Azure
Monitoring docker: from zero to AzureMonitoring docker: from zero to Azure
Monitoring docker: from zero to Azure
 
Cooking Akka.net and Azure Service Fabric together
Cooking Akka.net and Azure Service Fabric togetherCooking Akka.net and Azure Service Fabric together
Cooking Akka.net and Azure Service Fabric together
 
Azure data platform overview
Azure data platform overviewAzure data platform overview
Azure data platform overview
 
ACR + ACS + VSTS: a complete ALM pipeline with docker and azure
ACR + ACS + VSTS: a complete ALM pipeline with docker and azureACR + ACS + VSTS: a complete ALM pipeline with docker and azure
ACR + ACS + VSTS: a complete ALM pipeline with docker and azure
 
Docker & Azure
Docker & AzureDocker & Azure
Docker & Azure
 
Docker and Azure
Docker and AzureDocker and Azure
Docker and Azure
 
Come ti "pusho" il web con WebSockets: da 0 a SignalR
Come ti "pusho" il web con WebSockets: da 0 a SignalR Come ti "pusho" il web con WebSockets: da 0 a SignalR
Come ti "pusho" il web con WebSockets: da 0 a SignalR
 
Azure service fabric: a gentle introduction
Azure service fabric: a gentle introductionAzure service fabric: a gentle introduction
Azure service fabric: a gentle introduction
 
From CRUD to messages: a true story
From CRUD to messages: a true storyFrom CRUD to messages: a true story
From CRUD to messages: a true story
 

Uno sguardo a CQRS ed EventSourcing

Notes de l'éditeur

  1. Anaemic domain modelDTOOttimizzazione query ORMDevelopment timeTestability
  2. Separazionetra I due contesti:ScritturaLetturaNOTA: sono due bounded context
  3. Separazionetra I due contesti:ScritturaLetturaNOTA: sono due bounded context
  4. Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
  5. Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
  6. Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
  7. Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
  8. Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello