Autor | Zpráva | ||
---|---|---|---|
pavelkos Profil * |
#1 · Zasláno: 12. 11. 2008, 11:41:06
Ahoj,
mam problem s navrhem trid, ktere obaluji DB tabulky - vysvetlim na prikladu: v DB mame tabulku "users" s typickymi atributy - jmeno, prijmeni, mesto, pcs, cislo domu atd... udelam tedy tridu User a v konstruktoru ji predam ID a nactu data z DB trida user bude mit dalsi metody pro zpracovani atributu - napr sestaveni stringu pro vyslednou adresu apod. pak bych napr. pri zobrazovani profilu udelal neco takoveho: $user = new User($id); echo "Bydliste: ".$user->getAddress(); pokud ale budu chtit vypsat napr. poslednich 10 prihlasenych uzivatelu, tak jsem v haji. Co me napada je vytvorit tridu User (v konstruktoru ji predam vsechny atributy) a pak mit tridu Users, ktera se bude starat o nacitani dat z DB a bude mit pole objektu User ale toto se mi zda slozite... :( Jak to resite vy? ;-) Diky |
||
blaaablaaa Profil * |
#2 · Zasláno: 12. 11. 2008, 11:48:57
uzivatele si ukladej do pole ... pokud zadas id, bude to pole o jednom prvku, pokud zavolas metodu treba lastLogged, bude mit 10 polozek, ...
|
||
BetaCam Profil |
#3 · Zasláno: 12. 11. 2008, 11:57:07 · Upravil/a: BetaCam
pavelkos
Třída User už podle svého jména by měla reprezentovat pouze jednoho uživatele. |
||
joe Profil |
#4 · Zasláno: 12. 11. 2008, 12:47:54
pavelkos
Můžeš si vytvořit další třídu - Users, která třeba zdědí třídu User, ale nemusí, to záleží co všechno v ní máš. Možná lepší by bylo mít jen jednu třídu pro práci s uživateli, takže třeba pro získání adresy by jsi napsal $users->getAddress(idUzivatele); Záleží na tom jaké operace budeš potřebovat, možná bych to ani nerozlišoval jestli se jedná jen o jednoho uživatele nebo o práci s více uživatelama. Ale to záleží co chceš aby to všechno umělo. A správně by třídu měl reprezentovat její název (BetaCam)... |
||
Mastodont Profil |
#5 · Zasláno: 12. 11. 2008, 12:48:14
pak mit tridu Users, ktera se bude starat o nacitani dat z DB a bude mit pole objektu User
Jistě to jde tak udělat. A co se bude dít s těmi jednotlivými júsry? |
||
pavelkos Profil * |
#6 · Zasláno: 12. 11. 2008, 17:37:24
„Jistě to jde tak udělat. A co se bude dít s těmi jednotlivými júsry?“
no prave ty jedntlivy User budou uchovavat ty data nacteny s DB + budou mit metody getAddress atd... ale zda se mi to prilis slozite |
||
Aesir Profil |
#7 · Zasláno: 12. 11. 2008, 20:18:35
pavelkos:
Osobně mám napsané abstraktní třídy implementující návrhový vzor Active Record, následně pro každou tabulku vytvořím třídu, která dědí onu abstraktní a používá již definované metody (např. pro přístup ke sloupcům tabulky) + své rozšířené (např. vaše getAddress apod.). |
||
pavelkos Profil * |
#8 · Zasláno: 12. 11. 2008, 23:18:35
„Osobně mám napsané abstraktní třídy implementující návrhový vzor Active Record, následně pro každou tabulku vytvořím třídu, která dědí onu abstraktní a používá již definované metody (např. pro přístup ke sloupcům tabulky) + své rozšířené (např. vaše getAddress apod.).“
Jasne, ale u active Record predstavuje jedna instance jeden radek tabulky ne? Takze pro vypsani poslednich 10-ti prihlasenych uzivatelu se 10x pristupuje k databazi? Diky za odpoved. |
||
BetaCam Profil |
#9 · Zasláno: 12. 11. 2008, 23:53:57 · Upravil/a: BetaCam
pavelkos
„ale zda se mi to prilis slozite“ No jestli ti přijde nadefinování dvou tříd složité tak nechci vidět co budeš dělat až budeš mít udělat něco opravdu složitého. |
||
Aesir Profil |
#10 · Zasláno: 14. 11. 2008, 14:13:33 · Upravil/a: Aesir
pavelkos:
„Jasne, ale u active Record predstavuje jedna instance jeden radek tabulky ne? Takze pro vypsani poslednich 10-ti prihlasenych uzivatelu se 10x pristupuje k databazi? “ Nemusí, mám dvě třídy, jeda je abstract Table, druhá abstract TableRow, přes třídu Table se dotážete na posledních 10 přihlášených a ta Vám vrátí kolekci 10ti objektů TableRow. Například :) Edit, snad srozumitelněji: Takže se do databáze dotážete jen jednou přes objekt Table, která vygeneruje pro každý výsledek objekt nad kterým můžete dělat další operace. |
||
Časová prodleva: 17 let
|
0