Designing and implementing a sourcing strategy with Boolean, CRM or Social Networking tools
Implementing Event Sourcing in .NET
-
Upload
andrea-saltarello -
Category
Software
-
view
477 -
download
3
description
Transcript of Implementing Event Sourcing in .NET
ImplementingEvent Sourcing in .NET
Andrea SaltarelloCEO @ managed/designs
[email protected]://twitter.com/andysal74http://slideshare.net/andysal
Who I am
1. CEO @ Managed Designs, striving to discover the perfect«sustainable software development process»
• Customer has to be satisfied and pay
• Supplier has to have a reasonable markup
• Team members should be satisfied with their work
2. Founder and leader of UGIdotNET (first Italian .NET User Group): I need to share experiences in a peer to peer way
3. (Co)Author (together with Dino) of .NET: ArchitectingApplications for the Enterprise, by Microsoft Press
4. Basically, a software developer
It really became clear to me in the last couple of years that we need a new building block and that is the Domain Event.
[Eric Evans]
An event is something that has happened in the past.
[Greg Young]
A domain event … captures the memory of something interesting which affects the domain
[Martin Fowler]
Why events?
«Undo principle»: Instead of focusing on a system’s last known state, we could note down every occurring event: this way, we would be able build the state the system was in at any point in time
To cut a long story short: we end up recording an event stream
JobOrderCreated InvoiceIssuedJobOrderExtended JobOrderClosed
Event Stream vs. «My application»
Still, my users are more interested in knowing a job order’s balance or whether an invoice hasbeen paid.
Ways to achieve that:
• Rebuilding the state traversing the wholeevent stream (slow, but snapshots can help)
• CQRS to the rescue: let’s have a database dedicated to store the last known state and have it read by the read model
CQRS/ES in a nutshell
1. Application sends a command to the system
2. Command execution alters the system’s state and raises events to state success/failure
3. Events are notified to interested subscribers, suchas:
• Workflow managers (a.k.a. «Sagas») which can execute more commands
• Denormalizers, which will update the readmodel
Note: command/event dispatch will usually be managed by a Mediator («bus»)
Read
Model
Application
Layer
Domain
layer
Event
store
QUERY
COMMAND
Bu
s
EVENT Handler
Handler
Handler
Snapshot
DB
CQRS/ES at a glance
On a technology side…
Looking for a bus and an event store: build or buy?
• Event Store:
–SQLWhatever
–MongoDB
–RavenDB
• Bus:
–NEventStore
–NServiceBus
My advice? Buy#donoteverthinkaboutmakingyourowntoolkit
The “Buy” Side of the Force
SQLWhatever MongoDB RavenDB
• Everyone’s skill• Every tool you can
need does exist• Both On-Premise
& cloud
• Free• Runs on both
Linux and Windows
• Both On-Premise & cloud
• Schemaless
• LINQ support• TX+DTC support• Schemaless• Both On-Premise
& cloud
MSMQ NEventStore NServiceBus
• ROTFL • Free• FOSS• DDD/CQRS/ES full
stack
• Advances configoptions
• Advancednotificationsfeatures
Bibliography
[DDD] Domain Driven Design, Eric Evans , Addison-Wesley
What I've learned about DDD since the book, Eric Evans, InfoQ
[NAAE] Microsoft .NET: Architecting Applications for the Enterprise (2° ed.), Andrea Saltarello & Dino Esposito, Microsoft Press
[MERP] Merp, https://naa4e.codeplex.com/