Your SlideShare is downloading. ×
  • Like
  • Save
Uno sguardo a CQRS ed EventSourcing
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Uno sguardo a CQRS ed EventSourcing

  • 1,077 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,077
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Anaemic domain modelDTOOttimizzazione query ORMDevelopment timeTestability
  • 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

Transcript

  • 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
  • 7. Aggregate e BoundedContext
    Class A
    Class D
    ClassB
    ClassB
    IList<ClassC>
    Class B
    Class B


    Class C

  • 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

  • 10. Qual è il problema?
    Edit DTO in UI
    • Aggiunta di un campo sulla UI
    • 11. Aggiunta di una property sul DTO
    • 12. Aggiuntadella property sul DM
    • 13. Mapping tra DTO e DM
    • 14. Mapping ORM
    • 15. Aggiunta campo sul DB
    Send DTO to server
    Map DTO to model
    Save model to DB
    BORING!!!!
  • 16. Qual è il problema?
    A single model cannot be appropriate for reporting, searching and transactionalbehavior
    Greg Young, 2008
  • 17. …ripartiamo da qui…
    DTO
    Remote Facade
    ORM
    Application Service
    DTO
    Presentation Layer
    Domain Model
  • 18. …ripartiamo da qui…
    • C’è comportamento?
    • 19. Abbiamo necessariamente bisogno di un “modello”?
    • 20. Abbiamo bisogno di integrità referenziale e normalizzazione?
    • 21. Possiamo accontentarci di dati “quasi” istantaneamente aggiornati?
    Presentation Layer
  • 22. …ripartiamo da qui…
    DTO
    Presentation Layer
    Remote Facade
    ORM
    Application Service
    DTO
    Domain Model
  • 23. …ripartiamo da qui…
    • Il domain model non nasce per “collezionare” o mostrare dati
    • 24. Il domain model deve sempre essere in uno stato consistente
    Domain 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
  • 30. Eventsourcing
    storing structure
    order
    items
    shipping
    info
  • 31. Eventsourcing
    storing deltas
    cart
    created
    add
    item
    add
    item
    remove
    item
    add
    shop info
  • 32. Eventsourcing
    • Ogni cambiamento di stato è rappresentato da un evento
    • 33. Ogni evento è memorizzato in un EventLog / EventQueue
    • 34. E’ possibile aggiungere “listener” in corso d’opera
  • Eventsourcing
    • Lo stato corrente è “costruibile” (ri)eseguendo gli eventi
    • 35. I dati non sono persistiti in “strutture”, ma come serie di transazioni di stato
    2
    3
    4
    5
    6
    7
    8
    1
    snapshot
  • 36. Benefits
    • No object-relationalimpedencemismatch
    • 37. Sistema “nativo” di auditing e tracking
    • 38. Possibilità di “rieseguire” la pipeline degli eventi
    • 39. bug fix – ricostruzione scenari produzione
    • 40. si possono aggiungere feature “retroattive”
  • Quando CQRS fa per me?
    Chiedilo al “tuo” UBIQUITOUS LANGUAGE
  • 41. Quando CQRS fa per me?
    TacklingComplexity in the Heart of Software
  • 42. Contatti
    alessandro@codiceplastico.com
    http://blogs.ugidotnet.org/amelchiori
    http://twitter.com/amelchiori