Tapahtumat ja päivitykset 24.00
Repository
-tapahtumat antavat sinun reagoida tietomuutoksiin. Automaattisten käyttöliittymäpäivitysten ohella voit kuunnella muutoksia ja laukaista mukautettua logiikkaa.
Repository
-tapahtuman elinkaari
Jokainen commit()
kutsu laukaisee RepositoryCommitEvent
. Tämä tapahtuma kuljettaa tietoa siitä, mitä on muuttunut:
repository.onCommit(event -> {
// Hanki kaikki kommitoidut entiteetit
List<Customer> commits = event.getCommits();
// Tarkista onko 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 kommitoituisSingleCommit()
- Olisiko tämä ollut kohdennettu yksittäisen entiteetin päivitysgetFirstCommit()
- Kätevyyden menetelmä, jolla saat ensimmäisen (tai ainoan) entiteetin
Kutsuttaessa commit()
ilman parametreja, tapahtuma sisältää kaikki entiteetit, jotka tällä hetkellä ovat repositoriolla suodattamisen jälkeen.
Päivitysstrategiat
Kaksi kommitin allekirjoitusta palvelevat eri tarkoituksia:
// Yksittäisen entiteetin päivitys - tehokas yksittäisille muutoksille
Customer customer = customers.get(0);
customer.setStatus("VIP");
repository.commit(customer);
// Kappaleittain päivitys - tehokas useille muutoksille
products.clear();
products.addAll(loadProductsFromCsv());
repository.commit();
Yksittäiset kommitit ovat kirurgisia - ne kertovat kytkettyille komponenteille tarkalleen, mikä rivi on muuttunut. Table
voi päivittää vain kyseisen rivin solut koskematta muihin.
Kappaleittaiset kommitit 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 käyttöliittymäkuviot
Repository
-tapahtumat antavat sinun ylläpitää yhteenvedonäyttöjä synkronoituna tietojesi kanssa:
// Itse päivittävät tarrat
repository.onCommit(event -> {
double total = sales.stream().mapToDouble(Sale::getAmount).sum();
totalLabel.setText(String.format("Yhteensä: $%.2f", total));
countLabel.setText("Myynnit: " + sales.size());
});
// Suorien tulosten laskenta
repository.onCommit(e -> {
long count = repository.findAll().count();
resultsLabel.setText(count + " tuotetta löytyi");
});
Nämä kuuntelijat laukaistaan jokaisella kommitilla, olipa se käyttäjän toimista, tietojen tuonnista tai ohjelmallisista päivityksistä. Tapahtuma antaa sinulle pääsyn kommitoituihin entiteetteihin, mutta usein lasket uudelleen lähdeyhdistelmästä ottaaksesi mukaan kaikki nykyiset tiedot.
Muistin hallinta
Tapahtumakuuntelijat pitävät viittauksia komponentteihisi. Jos et poista niitä, Repository
pitää komponenttisi muistissa, vaikka niitä ei enää esitetä:
// Pidä viittaus poistaaksesi myöhemmin
ListenerRegistration<RepositoryCommitEvent<Data>> registration =
repository.onCommit(event -> {
updateDisplay(event.getCommits());
});
// Siivoa kuuntelija, kun komponentti tuhotaan
if (registration != null) {
registration.remove();
}
onCommit()
-metodi palauttaa ListenerRegistration
-objektin. Tallenna tämä viittaus ja kutsu remove()
, kun komponenttisi tuhotaan tai ei enää tarvitse päivityksiä. Tämä estää muistivuotoja pitkäaikaisissa sovelluksissa.