Pozivanje metoda jedne klase u drugim klasama
Zdravo svima.
Zanima kako je najbolje pozivati funkcije (metode) neke DB klase u drugim klasama (recimo News class) a da to ispoštuje principe OOP, a da ima nekog smisla tako raditi. Jasno mi je da ovdje nema smisla ici sa nasljijedivanjem. Jesam li upravu ako kazem da je najlogicnije kreirati objekat Database klase unutar zeljene funkcije druge klase (News klase) i onda pozivati željene funckije Database klase?! Osakacena verzija DB kalse je ispod, kao i klasa News sa insertNews metodom. Bilo kakva pomoc, link na slicnu tematiku? Kôd:
<?php Kôd:
|
zasto nema smisla nasledjivati ?
|
Citat:
Visestruko naslijedivanje? Da li se moze desiti problem (ne znam sada navesti mogucu siutaciju, recimo news treba da naslijedi DB i Session class) u kojem mi klasa C treba naslijediti kalse A i B ili ce mi biti dovoljno pojedinacno nasljedivanje. Nemam puno iskustva sa OOP u praksi, tako da su mi potrebne smjernice. Hvala. |
News db table apstraction class nasledjuje Db class
gde news tabela ima metode poput save, delete isl na kraju imas news klasu koja nasledjuje news db table apstraction klasu i implementira njene metode u logicke celine, tipa InsertNewsEntry (validate, obradi podatke, save) Idealno bi bilo kada bi ti apstrakcije db tabela usustini bile samo konfiguracije db klase koja bi definisala opste metode insert, delete, update, load. U tom slucaju bi imao (grub primer): Class DB_Apstracion __construct <- record_id load_record(record_id) save if record loaded: update else: insert update insert delete ... count fetch .... (sta vec hoces) Class News_TableDB extends DB_Apstraction private db_fields array ( polja ) public ime_tabele __construct <-- record_id init(record_id) init parent::__construct(record_id) save parent::save(record_id) delete parent::delete(record_id) . . . itd Class News extends News_TableDB __construct <-- news_id init(news_id) AddNewEntry EditEntry DeleteEntry itd |
jedan malo manje grub primer od pre par godina imas na mom blogu:
http://www.hazaah.com/programming/gu...e-abstraction/ ali imaj na umu da je to idalje daleko od necega sto bi trebao da drzis u produkciji, uzmi kao smernicu |
Hvala, proanaliziracu sve ovo dtaljno.
pozdrav. |
u ovom tvom slucaju, bilo bi logicno da se Database objekat odradi kao singlton, a onda u drugoj klasi onda mozes da ga instanciras kad ti treba..
|
@ivanhoe
U principu danas sam skontao da moram nauciti design patterne. Naletio sam na jedan tekst (http://www.imarc.net/communique/view..._php_singleton) koji pokriva otprlike ono sto je mene mucilo i to je rješeno preko singleton patterna. I nekako mi izlgeda kao 'kulturno' rješenje. Analizirao sam phpBB3 i oni su to rjesili preko globalne varijable. U common.php koji se poziva u svim ostalim fajlovima su instancirali DB i onda u drugim klasama, tacnije njihovim metodama su stavili global $db i onda hladno koriste metode DB klase. Koliko sam shvatio ovo narusava neke principe OOP! Koliko je ovo zaista lose rješenje? |
Koje principe narušava? :D
Ja već dosta dugo koristim taj fazon. u index.php napravim objekte za smarty, db, user i još koješta potrebnog, a u raznim metodama samo po potrebi pozovem te objekte - global $db, $smarty; Što se mene tiče, tu nema ničeg lošeg, sasvim jednostavno, jasno i radi :) |
mozda tako mozes dok radis sam, cekaj dok se neko drugi dohvati tvojih metoda pa krene da definise lokalne varijable sa tim istim imenima.
zato ili singleton pa $db = Database::getInstance(); ili $db = new Database(); ja nekako mrzim singleton... :P a i mrzi me da svuda pravim novi $db (ovako ili onako), tako da posto mi sve i onako extenduje Model klasu to uradim jedom u njoj, pa to dodelim na $this->db; i to bude dostupno svuda.. a ne mrzi me da pisem $this->db->getRow('bla bla...'); bar znam da necu da se pokacim ni sa kakvom lokalnom varijablom. |
takodje tako mogu da $db iskoristim za konekciju ka drugoj bazi, dok je $this->db uvek ona primarna iz config fajla.
|
Kada ste se već zakačili za bazu, koliko često ste imali potrebu da se u istom scriptu kačite na 2 različite baze podataka istovremeno? Ja sam dugo koristio jednu klasu koju sam stalno instancirao $db = new Database()..., međutim usput sam došao do zaključka da mi to toliko retko treba da gubi svaki smisao te sam prebacio klasu u čisto statičku.
|
meni to vrlo retko treba, ali ne bi trebalo da je preveliki problem napraviti workaround, da mozes da kreiras vise konekcija iz istog singltona, samo svugde u metodama treba voditi racuna o trenutno aktivnom linku sa bazom...
a ako su baze sve na istom serveru, onda je dovoljna jedna konekcija, pa samo koristis baza.tabela sintaxu u SQL-u.. |
Vreme je GMT +2. Trenutno vreme je 01:58. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.