Event Store

Java User Group — 23 février 2016

Thibaud Dauce

Domain Driven Design

La conception doit mettre l'accent sur le domaine

créer un utilisateur != inscription d'un client

Conférence de Cyrille Martraire à Codeurs en Seine 2015

Command Query Responsibility Segregation

Séparation des requêtes sur les données et des modifications des données

Conférence de Eric et Sébastian Le Merdy à Codeurs en Seine 2015

Event Sourcing

Stocker l'état de l'application comme une succession d'événements

Article de Martin Fowler sur l'Event Sourcing

Qu'est-ce qu'un événement ?

Une simple structure de données


public final class ArticleWasPublished {

    private UUID articleId;
    private UUID publisherId;

    public ArticleWasPublished (UUID articleId, UUID publisherId) {
        this.articleId = articleId;
        this.publisherId = publisherId;
    }

    public UUID getArticleId() { return this.articleId; }

    public UUID getPublisherId() { return this.publisherId; }
}
                    

Exemple de modèle évènementiel

vos comptes en banque

DateCompteLibelléChangement
20/02/2016042Remboursement+20€
12/02/2016042Facture-20€
08/02/2016042Courses-12€
06/02/2016042Virement initial100€

Avantages

  • Utilisation du langage du domaine pour les évènements
  • Modifications explicites, pas de perte d'information
  • Mise à l'échelle très facile car système en ajout-seulement

Problème

Comment connaître le solde à un instant t ?

Obligation de recalculer à chaque fois = coûteux en temps

Solution

Mettre en place du cache ou des snapshots

Architecture type

Architecture