Événements et mises à jour 24.00
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éesisSingleCommit()- 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.