[ Lazar-I @ 06.06.2003. 12:48 ] @
problem u pseudo kodu (za konkretni programčić koristim C#): class CDatabase { ..............CObj GetObj(int id) .............{ ..........................if( Objekat se nalazi u keshu ) ..........................{ ...................................... Procitaj iz kesha ...................................... return obj; ......................... } ..........................else ..........................{ ......................................Procitaj iz baze ......................................Dodaj u kesh ......................................return obj; ..........................} .............} } Problem je kada ukloniti referencu na objekat iz keša. Naravno trebalo bi onda kada sem reference iz keša ne postoje druge reference na objekat. Moje resenje je: ............ keš je implementiran hashTabelom ............ Procitaj iz kesha(id) ............ { ......................... hashTabela[id].BrojReferenci++; ......................... return hashTabela[id].obj; .............} .............dodaj u kesh - BrojReferenci=1 Klasa CObj bi morala da ima metod ............ UkloniIzKesha() ............ { ......................... hashTabela[id].BrojReferenci--; ......................... if(BrojReferenci<1) ...................................... hashTabela[id].Remove(); ............ } Problem kod ovog resenja je 1. Mora se pozivati metod UkloniIzKesa()- da se nebi desilo da prevučem celu bazu na aplikativni server 2. Operacija dodele moze uzrokovati nepredvidjene rezultate, npr. CObj obj1=database.GetObj(34); CObj obj2=obj1; obj1.UkloniIzKesa(); CObj obj3=database.GetObj(34); Sada obj2 i obj3 predstavljaju isti objekat - id=34, ali postoje 2 instance tog objekta, pri cemu se obj2 ne nalazi u keshu. Ovo resenje je jednostavno ali lose, ima li neko bolje rešenje, ali da je takođe jednostavno ? |