1. Uno sguardo a CQRS ed eventsourcing Alessandro Melchiori alessandro@codiceplastico.com http://blogs.ugidotnet.org/amelchiori http://twitter.com/amelchiori
2. Domain Model An object model of the domain thatincorporatesbothbehavior and data [Martin Fowler- http://martinfowler.com/eaaCatalog/domainModel.html]
3. Un’architettura per tutti i gusti… DTO Presentation Layer Remote Facade ORM Application Service DTO Domain Model
4. 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
5. Domain Driven Design Use AGGREGATES asunit of consistencyacrossyour domain model Protectyour model with clearlydefined BOUNDED CONTEXT Il mio amico Eric Evans
6. Un’architettura per tutti i gusti… DTO Presentation Layer Remote Facade ORM Application Service DTO Domain Model
8. 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
9. Domain Events Class A Class D ClassB ClassB IList<ClassC> Class B Class B … … Class C …
22. …ripartiamo da qui… DTO Presentation Layer Remote Facade ORM Application Service DTO Domain Model
23.
24. Il domain model deve sempre essere in uno stato consistenteDomain Model
25. 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
26. CQRS WRITE Remote Facade Remote Facade App. Service ORM Command Query DM Presentation Layer Thin read layer Result READ
27. CQRS Remote Facade Remote Facade App. Service ORM Command Query DM Events Presentation Layer Thin read layer Result
28. 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
29. Eventsourcing State transition are an important part of ourproblemspace and should be modeledwithinour domain Greg Young, 2008
Separazionetra I due contesti:ScritturaLetturaNOTA: sono due bounded context
Separazionetra I due contesti:ScritturaLetturaNOTA: sono due bounded context
Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello
Gli oggetti del dominio non sono “pensati” per soddisfare le esigenze della UIAccoppiamento forte tra DomainModel e UIDifficoltà nel refactoring del modello