Qui suis-je ? (vaste question)
Ce que j'aime faire
Mon boulot actuellement
@ugobourdon
Etat 1
Etat 2
Etat 3
E 1
E 2
E 3
Event 1-2
Event 2-3
Un petit exemple - Le panier
Panier t1
Panier t2
Un petit exemple - Le panier
Panier t1
Panier t2
article retiré du panier
{ article 2 }
1 article ajouté au panier
__________________________________
{
    id: 1234,
    name: article 2,
    qty: 1,
    ...
}1 article retiré du panier
__________________________________
{
    id: 1234
}1 article ajouté au panier
__________________________________
{
    id: 3456,
    name: article 1,
    qty: 3,
    ...
}___________________________________________________________________
>
temps
Current state
{
    articles : [
        article : {
            id: 3456,
            name: article 1,
            qty: 3
        }
    ]
}apply
2 fonctions pour les contrôler toutes
        decide :: Command -> State -> [Event]
        apply :: State -> Event -> StateDECIDE
Command
[Event]
APPLY
State
Diagramme d'une boucle de rétro-action
Boite noire
Un système évènementiel c'est pareil
boite noire
Ouais c'est super mais t'es en train de nous arnaquer là !
Elle est où la base de données là ?
boite noire
Eventstore WTF ?
=> 1 simple queue de message
1 instance d'aggrégat = 1 stream d'évènement
La transactionalité n'est respectée qu'à l'intérieur d'un aggrégat donné
=> le système est "cohérent à terme"
__________________________________________________________________
>
BoatCreated
AvailPeriodAdded
BookingMade
BookingCanceled
...
t
Boat Aggregate | Boat Stream {id: 1234}
{
    aggregateUid: 1234,
    name: my supa boat,
    ...
}{
    aggregateUid: 1234,
    startDate: LocalDate,
    endDate: LocalDate,
    ...
}{
    aggregateUid: 1234,
    bookingUid: 2534,
    startDate: LocalDate,
    endDate: LocalDate,
    price: BigDecimal
}{
    aggregateUid: 1234,
    bookingUid: 2534
}__________________________________________________________________
>
BrokerEnrolled
BoatAdded
...
t
Broker Aggregat (boat owner)
{
    aggregateUid: 1234,
    name: best broker,
    ...
}{
    aggregateUid: 1234,
    boatUid: 1234
}boite noire
Bon c'est cool, mais ton truc c'est pas clair, en terme de perf ça à l'air bien pourri.
Et surtout, l'utilisateur lui il veut des écrans, comment on fait ?
Crédits / ressources