[ _owl_ @ 12.12.2004. 01:09 ] @
Zanima me da li kada vrsite materijalizaciju objekata iz baze materijalizujete kompletne objekte. Naime, postoje slucajevi kada treba vrsiti obradu nad objektom koji ima dosta veza sa drugim objektima (referencira ih) a da podaci iz tih drugih objekata nisu potrebni za zahtevanu operaciju. Da li tada materijalizujete objekte sa samo potrebnim podacima ili iz baze izvlacite kompletnu mrezu objekata?
[ Rapaic Rajko @ 14.12.2004. 10:20 ] @
Hm, otprilike kapiram sta pitas (i sta te muci). Da pogadjam, kreiranje (materijalizacija, kako ti kazes) objekata je ovde ZAHTEVNA operacija, pa bi hteo da minimalizujes to koliko god je moguce...?
Zavisi kakva je vrsta relacija (medjusobnog referenciranja) izmedju objekata, kao i koliko su oni (objekti) slozeni. Relacije mogu biti i DVOSMERNE, to jest objekat A da bi upotrebio podatke iz objekta B (ciju ima referencu) ponekad mora da trazi DOZVOLU od objekta B. Ima tu more kombinacija, ali imas dva puta da resis problem:
1) da razvijes vrlo precizan nacin razdvajanja kad treba a kad ne treba da se materijalizuje objekat B (vrlo tesko, u praksi se kad-tad desi da se objekat A obrati NEPOSTOJECEM (nil) B objektu, i sve pukne)
2) da kreiras i objekat A i sve pratece objekte B SAMO JEDNOM (prilikom startovanja) i da ih drzis u zivotu sve vreme rada aplikacije; znaci, ne da ih kreiras i ubijas svaki cas.

Rajko

P.S. Odgovor je uopsten jer je i pitanje takvo; konkretizuj, pa cu i ja.
[ jablan @ 14.12.2004. 10:58 ] @
Koliko znam, termin je serijalizacija / deserijalizacija, a ne materijalizacija.

Mi konkretno deserijalizujemo objekat po objekat. Na objektu A možeš napraviti property za pristup povezanom objektu B, koji će po zahtevu deserijalizovati objekat B iz baze i vratiti njegovu instancu.
[ filmil @ 14.12.2004. 11:50 ] @
Citat:
Mi konkretno deserijalizujemo objekat po objekat. Na objektu A možeš napraviti property za pristup povezanom objektu B, koji će po zahtevu deserijalizovati objekat B iz baze i vratiti njegovu instancu.
Ne znam koliko je primenljivo na problem, ali Eclipse Modeling Framework (EMF) ima nešto jako slično.

Pošto Eclipse može da se teoretski sastoji od stotina dodataka, ako želimo da se stvar pokrene u bliskoj budućnosti, ne smemo da na početku inicijalizujemo sve objekte.

Eclipse pravi tzv. shadow world, iliti za svaku instancu klase po jedan proxy, koji ne sadrži ništa do trenutka kada se prvi put pozove neka njegova metoda. U trenutku kada se prva metoda pozove, Eclipse inicijalizuje objekat. Za ovaj trik se očigledno dosta koristi refleksija i verovatno je jako puno posla da se odradi kako treba. Deluje da kod mora da ume da za proizvoljnu klasu napravi runtime proxy, i da za svaku klasu moraš da definišeš svoje metode za serijalizaciju. Ali, možda je moguće da se odgovarajući kod 'pozajmi' iz EMF-a i tako skrati posao.

f
[ filmil @ 14.12.2004. 11:55 ] @
Citat:
serijalizaciju. Ali, možda je moguće da se odgovarajući kod quot;pozajmiquot; iz EMF-a i tako skrati posao.

A dabome, uvek možeš i da pri upisu vodiš računa šta se serijalizuje, kako ne bi bilo višaka.

f
[ _owl_ @ 15.12.2004. 22:42 ] @
Mozda bi bilo zgodnije da objasnim konkretan problem (koji sada bas i nije veliki). Radim malu Java klijent/server aplikaciju kao projektni za fax. Recimo da je ovo UML prikaz klasa koje se nalaze u bazi.



Poslovna logika je takva da se obrada podataka klase RezultatPrijemnog vrsi na posebnoj formi gde se moze menjati samo broj bodova. Ipak kada zelim da sa servera posaljem ovaj objekat klijentu on mora sadrzati reference na odgovarajuce objekte tipa VrstaPrijemnog i Kandidata (a ovaj reference na SrednjuSkolu i kolekciju objekata tipa Svedocanstvo ). Meni su za uspesno izvrsenje ove operacije potrebni samo podaci o broju bodova i o identifikatorima (atributi koji odgovaraju primarnim kljucevima) objekata Kandidat i VrstaPrijemnog. U ovom slucaju ja treba dodatno da instanciram Svedocanstva i SrednjuSkolu (koji su potpuno nepotrebna za pomenutu operaciju). Da li se smatra dobrom praksom da objekat tipa RezultatPrijemnog sadrzi referencu na "nekompletan" objekat tipa Kandidat (ne sadrzi Svedocanstva i SrednjuSkolu)??
[ jablan @ 16.12.2004. 07:59 ] @
Zašto moraš da instanciraš svedočanstva i srednju školu? Ti u klasi Kandidat možeš imati aksesore na objekte koji sadrže svedočanstva i srednju školu datog kandidata, ali da ih iz baze instanciraš tek kad ih neko zatraži. To se neće desiti u obradi rezultata prijemnog. Nadam se da se razumemo.

Ne znam Javu, ali sigurno je nešto slično ovom:
Code:

class Kandidat
{
 . . .
  private Skola srednjaSkola;

  private Skola GetSrednjaSkola() {
    return Skola.GetSrednjaSkolaByKandidat(this.kandidatId);
  }

  public Skola SrednjaSkola {
    get 
    {
      if (srednjaSkola == null)
        srednjaSkola = GetSrednjaSkola();
      return srednjaSkola;
    }
  }
 . . .
}