Non ho capito se l’alto messaggio che avevo inviato alla lista arrivato,
nel dubbio rimando.
A me non era arrivato niente, hai fatto bene a rimandare!
Segnalo a chi fosse interessato all’argomento che dei miei amici hanno
rilasciato (finalmente dopo 2 anni di pressing ) le gemme che hanno
utilizzato nei loro progetti interni per implementare CQRS+ES.
L’approccio molto interessante, me lo studier a fondo. Ci sono un po’
di
punti che non mi sono chiari: per esempio, se due handler possono
reagire
allo stesso evento (gli eventi vengono mandati in broadcast a tutti gli
handler
vero?).
Devo ammettere per che i problemi che lamentano nella presentazione
per zero downtime deployment e scaling mi fanno un po’ paura.
Credo che questo stile di programmazione potrebbe essere portato molto
bene su un linguaggio come Elixir (1 actor per handler, pattern match
degli
eventi da parte degli handler).
L’approccio molto interessante, me lo studier a fondo. Ci sono un po’
di punti che non mi sono chiari: per esempio, se due handler possono
reagire allo stesso evento (gli eventi vengono mandati in broadcast a tutti
gli handler vero?).
Esatto, l’event store fa anche da pubsub ad esempio in sequent l’event
store ha questo pezzo di codice:
Potresti anche decidere di delegare completamente ad un event store
esterno
come ad esempio (https://geteventstore.com/)
Devo ammettere per che i problemi che lamentano nella presentazione per
zero downtime deployment e scaling mi fanno un po’ paura.
Per quello che ho studiato io in realta’ non vedo grossi problemi, provo
a
spiegarmi sapendo che e’ un argomento che meriterebbe una mail a parte.
Il prerequisito, ovviamente, e’ avere almeno 2 istanze dell’applicazione
e
l’event store che fa da pubsub disaccoppiato dalle istanze.
Aggiorni la prima istanza, che iniziera’ a lanciare nuovi eventi per cui
la
seconda istanza non si e’ registrata e quindi non si rompera’ ma a cui
rispondera’ solamente la prima gia’ aggiornata. Dopo procedi
all’aggiornamento della seconda.
Prova a vedere i punti 7 e 8 di questo articolo: http://cqrs.wikidot.com/case:lokad-hub
DDD (figuriamoci poi con ES) e’ sicuramente ‘troppo’ quando stiamo
facendo
un CRUD ma quando iniziamo ad dover affrontare un problema interessante
da
risolvere, unito a tecniche come Event Storming semplifica enormemente
la
vita (ma qui sto parlando con la voce di amici che hanno gia’ messo in
produzione).
Credo che questo stile di programmazione potrebbe essere portato
molto bene su un linguaggio come Elixir (1 actor per handler, pattern match
degli eventi da parte degli handler).
La tua intuizione e’ corretta :), tratto da Implementing DDD:
However, Event Sourcing is inherently functional in nature. Thus, it can
be
successfully implemented with functional languages such as F# and
Clojure.
Doing so could potentially lead to more concise code that performs
optimally.
qui puoi trovare una bozza semplicistica di implementazione con
elixir:
un collega sta facendo un poc con Scala e Akka-persistence ma i concetti
son quelli.