Hogyan bánjak Javában az adatbázisból érkező kvázistatikus adatokkal?
Akarok egy osztályt, amelyik lekérdez egy ritkán változó táblát, és ebből rendezett adatokat szolgáltat a többi osztálynak. Simán lehetnének csak statikus metódusai, nem is kéne példányosítani, de mi van, ha változnak az inicializálás után az adatok?
a) Csinálok egy frissítő metódust, és a klienseknek azt kell először meghívniuk (ez mintha sértené a zártság elvét, meg elvileg nem üzembiztos).
b) Mindegyik statikus metódus frissíti az adatokat híváskor. Lehet, hogy többe kerül a leves, mint a hús.
c) Betárolom az utolsó frissítés idejét, és ha nagyobb, mint 1 óra, akkor újra frissítek.
d) Hagyjam a fenébe az egészet, és legyen inkább példányosítva, mert akkor biztosan frissek benne az adatok?
Mindegyik működőképes, de melyik az elegáns?










"Akarok egy osztályt, amelyik lekérdez egy ritkán változó táblát, és ebből rendezett adatokat szolgáltat a többi osztálynak. Simán lehetnének csak statikus metódusai, nem is kéne példányosítani, de mi van, ha változnak az inicializálás után az adatok?
- Felejtsd el. Statikus osztályban nem tárolunk állapotot. A betöltött adatok pedig az adatbázisod egy állapotát tükrzik.
a) Csinálok egy frissítő metódust, és a klienseknek azt kell először meghívniuk (ez mintha sértené a zártság elvét, meg elvileg nem üzembiztos).
- A kliensre nem bízhatod ezt, először is duplikálod az adatelérés logikáját másrészt nem lehetsz benne biztos, hogy minden kliens hívni fogja a frissítést, harmadrészt ha frissítesz, ha kell, ha nem célját vesztik a letárolt adataid.
b) Mindegyik statikus metódus frissíti az adatokat híváskor. Lehet, hogy többe kerül a leves, mint a hús.
- Másodszor is leírom. Felejtsd el a statikus metódusokat. Nem erre valók.
- Ha minden metódus frissíti az adatokat, akkor egyáltalán minek tartod őket memóriában?
c) Betárolom az utolsó frissítés idejét, és ha nagyobb, mint 1 óra, akkor újra frissítek.
- Ha az adatok valóban ritkán változnak ÉS a programodon kívül más is változtat az adabázison, akkor ez az egyetlen jó megoldás.
- Ha csak a programod piszkálhatja az adatbázist, akkor azon belül kell megoldani a már betöltött adatok frissítését.
d) Hagyjam a fenébe az egészet, és legyen inkább példányosítva, mert akkor biztosan frissek benne az adatok?
- A példányosítástól miért frissülnének az adatok? WTF.?
A c) is értelemszerűen a statikus metódusokra vonatkozott. Ha nem használom őket, akkor felesleges.
#2: az utolsó változtatás idejét le tudom kérdezni közvetlenül a táblából, de ennek majdnem akkora költsége van, mint lekérdezni magukat az adatokat (pár tucat rekordról van szó).





Valószínűleg ez lesz, nem nagy költség se a lekérdezés, se a példányosítás. Igazából az érdekel, hogy eszmeileg mi a szép megoldás egy ilyen problémára.
Lehetne csinálni egyke osztályt is, és a getInstance() frissítené az adatokat. Így nem keletkeznek felesleges objektumpéldányok, és mégis mindig friss adatok lennének benne.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!