Tapahtumat ja päivitykset 24.00
Repository-tapahtumat antavat sinun reagoida tietojen muutoksiin. Automaattisten UI-päivitysten lisäksi voit kuunnella muutoksia laukaistaksesi mukautettua logiikkaa.
Repository-tapahtuman elinkaari
Jokainen commit()-kutsu laukaisee RepositoryCommitEvent:n. Tämä tapahtuma sisältää tietoja siitä, mitä muutettiin:
repository.onCommit(event -> {
// Hanki kaikki sitoutuneet entiteetit
List<Customer> commits = event.getCommits();
// Tarkista, oliko kyseessä yksittäisen entiteetin päivitys
if (event.isSingleCommit()) {
Customer updated = event.getFirstCommit();
System.out.println("Päivitetty: " + updated.getName());
}
});
Tapahtuma kertoo sinulle:
getCommits()- Lista entiteeteistä, jotka on sitoutettuisSingleCommit()- Olisiko tämä ollut kohdennettu yksittäisten entiteettien päivitysgetFirstCommit()- Kätevä menetelmä ensimmäisen (tai ainoan) entiteetin saamiseksi
Jos commit()-kutsussa ei ole parametreja, tapahtuma sisältää kaikki entiteetit, jotka ovat tällä hetkellä varastossa suodattamisen jälkeen.
Päivitysstrategiat
Kaksi sitoutumisen allekirjoitusta palvelevat eri tarkoituksia:
// Yksittäisen entiteetin päivitys - tehokas yksittäisille muutoksille
Customer customer = customers.get(0);
customer.setStatus("VIP");
repository.commit(customer);
// Massapäivitys - tehokas useille muutoksille
products.clear();
products.addAll(loadProductsFromCsv());
repository.commit();
Yksittäiset sitoutumiset ovat kirurgisia - ne kertovat yhteydessä oleville komponenteille tarkalleen, mikä rivi muuttui. Table voi päivittää vain sen rivin solut koskematta muihin asioihin.
Massasitoutumiset päivittävät kaiken. Käytä niitä, kun:
- Useita entiteettejä on muuttunut
- Olet lisännyt tai poistanut kohteita
- Et ole varma, mitä on muuttunut
Reaktiiviset UI-mallit
Repository-tapahtumat antavat sinun pitää yhteenveto-näytöt synkronoituina tietosi kanssa:
// Automaattisesti päivittävät etiketit
repository.onCommit(event -> {
double total = sales.stream().mapToDouble(Sale::getAmount).sum();
totalLabel.setText(String.format("Yhteensä: $%.2f", total));
countLabel.setText("Myynnit: " + sales.size());
});
// Live-tuloslukemat
repository.onCommit(e -> {
long count = repository.findAll().count();
resultsLabel.setText(count + " tuotetta löydetty");
});
Nämä kuuntelijat laukaisevat jokaisella sitoutumisella, riippumatta siitä, tulevatko ne käyttäjätoiminnoista, tietojen tuonnista vai ohjelmallisista päivityksistä. Tapahtuma antaa sinulle pääsyn sitoutettuihin entiteetteihin, mutta usein lasket uudelleen alkuperäisestä kokoelmasta sisällyttääksesi kaikki nykyiset tiedot.
Muistinhallinta
Tapahtumakuuntelijat pitävät viittauksia komponentteihisi. Jos et poista niitä, Repository pitää komponenttisi muistissa, vaikka niitä ei enää näytettäisi:
// Pidä viittaus, jotta voit poistaa myöhemmin
ListenerRegistration<RepositoryCommitEvent<Data>> registration =
repository.onCommit(event -> {
updateDisplay(event.getCommits());
});
// Siivoa kuuntelija, kun komponentti tuhotaan
if (registration != null) {
registration.remove();
}
onCommit()-menetelmä palauttaa ListenerRegistration-olion. Tallenna tämä viittaus ja kutsu remove() kun komponenttisi tuhotaan tai ei enää tarvitse päivityksiä. Tämä estää muistivuotoja pitkäkestoisissa sovelluksissa.