Siirry pääsisältöön

Tapahtumat ja päivitykset 24.00

Avaa ChatGPT:ssä

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 kommitoitu
  • isSingleCommit() - Olisiko tämä ollut kohdennettu yksittäisen entiteetin päivitys
  • getFirstCommit() - 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.