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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Uno sguardo a CQRS ed EventSourcing

1,104

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,104
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
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

    ×