Symfony Day: il nostro punto di vista

sf day logo small

La scorsa settimana siamo stati docenti, speaker e pubblico al Symfony Day, conferenza italiana itinerante dedicata al framework PHP, quest’anno a Milano presso l’auditorium Marinotti dell’Università degli studi Milano-Bicocca.

Giovedì, il giorno prima della conferenza, Riccardo, Michele e 14 volenterosi sviluppatori si sono “sporcati le mani” con CQRS/Event Sourcing. Una full immersion di 8 ore sull’argomento, dove oltre alla teoria s’è dato spazio a numerose esercitazioni pratiche.

La mattina successiva abbiamo raggiunto di buon’ora l’auditorium e ci siamo accaparrati i posti in prima fila, così da godere di un punto di vista privilegiato del palco, dove a turno sono saliti amici e speaker, tra cui Ettore e Simone.

(altro…)

CQRS/ES per sviluppatori Symfony, il workshop a Milano!

Il 19 ottobre saremo a Milano con il workshop CQRS/Event Sourcing per sviluppatori Symfony, tenuto da Riccardo in occasione del SymfonyDay 2017.

L’argomento non ci è nuovo, ne avevamo già parlato nella serie di post “CQRS e Event Sourcing: il nostro primo progetto andato in produzione“.
A distanza di un anno, abbiamo ideato un workshop rivolto a tutti coloro che vogliono accelerare la loro curva di apprendimento sull’argomento.
Il corso ha l’obiettivo di far conoscere le basi di CQRS/ES partendo da un approccio teorico fino ad arrivare all’implementazione di un caso d’uso.

Inoltre, il giorno successivo, come ormai da diversi anni, saremo presenti non solo come sponsor ma anche come speaker al SymfonyDay 2017, la conferenza italiana dedicata al framework che ha recentemente superato il milione di download (gratuiti)!

(altro…)

L’autunno sta arrivando e con lui le conferenze da non perdere!

conferenze con ideatos

L’estate sta finendo e un anno se ne va
Sto diventando grande, lo sai che non mi va

 

Così cantavano i Righeira nel lontano ’85. Non potevano immaginare che avrei usato le loro parole nella preparazione del talk per le conferenze che mi aspettano.

Esatto, quest’autunno sarà il mio turno sotto le luci della ribalta… ma non sarò da sola!
Dopo Carla, Michele, Paolo, Francesco e Marco, che hanno calcato i più svariati palchi, dal CSSDay al PHPDay, passando per  ContainerDay, Chatbot4Enterprise e Codemotion, nei prossimi mesi potrai trovare ancora gli asterischi in giro per l’Italia.

(altro…)

CQRS ed Event Sourcing: Il nostro primo progetto andato in produzione – Parte 4 Implementiamo un api per l’approvazione di un prestito

Per sviluppare Soisy abbiamo utilizzato symfony2broadway: prendendo come esempio uno dei casi d’uso dell’applicazione (opportunamente semplificato), in questo post vi mostreremo come l’abbiamo implementato.

Questo lo scenario: il cliente che ha richiesto un prestito dovrà fornire diverse informazioni (codice fiscale, nome, cognome ecc) . Alla fine di questo flusso verrà generata la richiesta di approvazione del prestito. L’approvazione avviene in tempo reale senza tempi di attesa.

Vediamo cosa succede lato backend quando viene invocata l’api per richiedere l’approvazione:

Command bus e repository per il read model Loan sono stati registrati come servizi nel container. In questo ci viene in aiuto il BroadwayBundle che registra dei servizi e mette a disposizione comandi da console per creare o cancellare l’event store.

Il comando viaggia sul command bus e viene gestito dal relativo Command Handler. Broadway utilizza la convezione handleNOME_COMANDO

Dopo che l’aggregato è stato ricostruito, viene chiamato il metodo approve.

Alla fine di ogni metodo di un aggregato viene chiamato il metodo apply che permette di collezionare una serie di eventi, che successivamente verranno salvati nell’event store grazie al repository utilizzato nel Command Handler.

In un approccio CQRS puro, avremo salvato l’aggragato vero e proprio. In event sourcing salviamo gli eventi, che rappresentano lo stato del nostro aggregato.

Come detto negli articoli precenti, una volta salvati gli eventi vengono pubblicati dall’event bus e mandati a tutti i projector che sono in ascolto. Broadway utilizza la convenzione handleNOME_EVENTO.

Questo metodo del projector aggiorna il read model e lo salva.

Il controllo torna al controller symfony che esegue una query ottenendo il read model aggiornato e lo restituisce al chiamante.

E’ importante notare che tutto il flusso avviene all’interno di una singola richiesta PHP, quindi in maniera sincrona. Nel caso in cui ci sia l’esigenza di renderlo asincrono c’è un interessante approccio che prevede l’utilizzo di code per la proiezione dei dati e quindi la costruzione dei read model.

Nel prossimo (e ultimo post) trarremo le conclusioni su questa esperienza che tuttora stiamo portando avanti anche su un altro progetto.