Passer au contenu principal

Événements et mises à jour 24.00

Ouvrir dans ChatGPT

Les événements du Repository vous permettent de réagir aux changements de données. Au-delà des mises à jour automatiques de l'interface utilisateur, vous pouvez écouter les changements pour déclencher une logique personnalisée.

Cycle de vie des événements Repository

Chaque appel de commit() déclenche un RepositoryCommitEvent. Cet événement contient des informations sur ce qui a changé :

repository.onCommit(event -> {
// Obtenez toutes les entités engagées
List<Customer> commits = event.getCommits();

// Vérifier si la mise à jour concerne une seule entité
if (event.isSingleCommit()) {
Customer updated = event.getFirstCommit();
System.out.println("Mis à jour : " + updated.getName());
}
});

L'événement vous indique :

  • getCommits() - Liste des entités qui ont été engagées
  • isSingleCommit() - Indique si c'était une mise à jour ciblée d'une seule entité
  • getFirstCommit() - Méthode pratique pour obtenir la première (ou la seule) entité

Pour commit() sans paramètres, l'événement contient toutes les entités actuellement dans le dépôt après filtrage.

Stratégies de mise à jour

Les deux signatures de commit servent des objectifs différents :

// Mise à jour d'une seule entité - efficace pour des changements individuels
Customer customer = customers.get(0);
customer.setStatus("VIP");
repository.commit(customer);

// Mise à jour en masse - efficace pour plusieurs changements
products.clear();
products.addAll(loadProductsFromCsv());
repository.commit();

Les commits d'entités uniques sont chirurgicales - ils informent les composants connectés exactement quelle ligne a changé. Le Table peut mettre à jour uniquement les cellules de cette ligne sans toucher à quoi que ce soit d'autre.

Les commits en masse rafraîchissent tout. Utilisez-les lorsque :

  • Plusieurs entités ont changé
  • Vous avez ajouté ou supprimé des éléments
  • Vous n'êtes pas sûr de ce qui a changé

Modèles UI réactifs

Les événements du Repository vous permettent de garder les affichages récapitulatifs synchronisés avec vos données :

// Étiquettes se mettant à jour automatiquement
repository.onCommit(event -> {
double total = sales.stream().mapToDouble(Sale::getAmount).sum();
totalLabel.setText(String.format("Total : $%.2f", total));
countLabel.setText("Ventes : " + sales.size());
});

// Comptes de résultats en direct
repository.onCommit(e -> {
long count = repository.findAll().count();
resultsLabel.setText(count + " produits trouvés");
});

Ces auditeurs se déclenchent à chaque commit, qu'il provienne d'actions des utilisateurs, d'importations de données ou de mises à jour programmatiques. L'événement vous donne accès aux entités engagées, mais vous recalculerez souvent à partir de la collection source pour inclure toutes les données actuelles.

Gestion de la mémoire

Les auditeurs d'événements conservent des références à vos composants. Si vous ne les supprimez pas, le Repository conserve vos composants en mémoire même après qu'ils ne sont plus affichés :

// Conserver la référence pour la supprimer plus tard
ListenerRegistration<RepositoryCommitEvent<Data>> registration =
repository.onCommit(event -> {
updateDisplay(event.getCommits());
});

// Nettoyez l'auditeur lorsque le composant est détruit
if (registration != null) {
registration.remove();
}

La méthode onCommit() retourne un ListenerRegistration. Conservez cette référence et appelez remove() lorsque votre composant est détruit ou n'a plus besoin de mises à jour. Cela prévient les fuites de mémoire dans les applications de longue durée.