Autor | Zpráva | ||
---|---|---|---|
zacatecnik Profil |
#1 · Zasláno: 19. 6. 2012, 18:00:46
Dobrý den,
chtěl jsem se zeptat, jestli třídy zpomalují běh aplikace a jestli je vhodné, dělat třeba 10 tříd, když každá bude pracovat s něčím typu : Uživatel, Jazyk, Skupina, ... Nebo jestli je lepší udělat pár základních tříd a zbytek psát už normálně. Pak by mě zajímalo, když mám tedy ty třídy, zda má cenu dělat v ní funkce na něco, co použiji jen na jedné stránce, nebo jestli to mám vložit na ní. Děkuji předem za odpověď a snad jsem to napsal srozumitelně... |
||
quatzael Profil |
#2 · Zasláno: 19. 6. 2012, 18:07:42
třídy nijak nezpomalují běh (pokud jich tam samozřejmě nenasekáš tisíce..)
objektový programování je o účelnosti (tzn. i počet metod), nejdřív si pořádně promysli jak chceš aby to fungovalo, potom teprv vytvářej třídy a metody.. |
||
zacatecnik Profil |
#3 · Zasláno: 19. 6. 2012, 19:44:49
Je lepší udělat hlavní třídu, kterou zavolám z kódu a ve které potom budu ovládat ty další?
(např.:$hlavni->obycejna->funkce();) |
||
Lamicz Profil |
#4 · Zasláno: 19. 6. 2012, 20:26:52
Tohle je už IMHO otázka návrhových vzorů. Záleží vždy na konkrétním případě. Jinak je pravda, že OOP aplikace mají většinou "taťku všech objektů", v nette je to tuším Nette\Object.
|
||
zacatecnik Profil |
#5 · Zasláno: 19. 6. 2012, 20:36:06
Pro prohlížečovou hru by jste použili jaký návrhový vzor, co mi můžete doporučit před tím, než začnu? Nerad bych začal špatně a projekt nedokončil, protože tam něco bude celé špatné a bude se to muset celé předělat. Prosím tedy Vás zkušenější o radu.
|
||
Keeehi Profil |
#6 · Zasláno: 19. 6. 2012, 20:39:09
zacatecnik:
Návrhových vzorů by se použila určitě spousta. Na každý problém ten správný. Nejsem si jistý, jestli máš dostatek znalostí k vytvoření prohlížečové hry. Takže jako zkušenější bych ti doporučil začít s něčím lehčím. Třeba s blogem. |
||
zacatecnik Profil |
#7 · Zasláno: 20. 6. 2012, 14:58:57
Jak správně udělat 3 třídy tak, aby jedna byla hlavní a druhé byli podřadné ve smyslu, že v hlavní budu moct volat obě podřadné a v podřadných budu moct volat hlavní i podřadnou.
|
||
Joker Profil |
#8 · Zasláno: 20. 6. 2012, 16:23:50
quatzael:
„třídy nijak nezpomalují běh“ Zdroj? Za dob PHP4 se psalo, že objekty v PHP jsou pomalejší, v některých případech i výrazně. Nicméně se zdá, že s novějšími verzemi se rozdíl snížil, bohužel jsem to přestal sledovat. Na druhé straně, výhodou OOP není míra optimalizace kódu, ale jednodušší a rychlejší návrh aplikace. Přičemž dobrý návrh aplikace se může výrazně promítnout i do rychlosti. zacatecnik: „Nebo jestli je lepší udělat pár základních tříd a zbytek psát už normálně.“ Jak normálně? Jako procedurálně? To rozhodně nedoporučuji. Procedurální a objektové programování jsou dva různé světy s různým způsobem uvažování. Buď bych dělal celou aplikaci objektově, nebo celou aplikaci procedurálně, ale rozhodně ne nějaký hybrid. „když mám tedy ty třídy, zda má cenu dělat v ní funkce na něco, co použiji jen na jedné stránce, nebo jestli to mám vložit na ní.“ To je jednoduché: Kam ta funkčnost patří? Pro jakoukoli funkčnost aplikace existuje v objektovém modelu třída, kam ta funkčnost logicky patří. A právě tam má být. Pokud aplikace má něco umět a není pro to žádná vhodná třída, je objektový model neúplný nebo špatný. |
||
zacatecnik Profil |
#9 · Zasláno: 20. 6. 2012, 18:24:31
„Jak správně udělat 3 třídy tak, aby jedna byla hlavní a druhé byli podřadné ve smyslu, že v hlavní budu moct volat obě podřadné a v podřadných budu moct volat hlavní i podřadnou.“
A poté by mě zajímala poslední věc, když budu mít třeba inventář, tak mám 2 možnosti: a) udělám 1 sloupec a v něm bude inventář rozdělen třeba pomocí "|" a až ho budu potřebovat explodnu ho. b) udělám pro každé místo v inventáři sloupec. Zajímalo by mě jaká z těchto možností je vzhledem k rychlosti nejvýhodnější. |
||
Alphard Profil |
#10 · Zasláno: 20. 6. 2012, 19:01:39
|
||
juriad Profil |
#11 · Zasláno: 20. 6. 2012, 19:02:42
zacatecnik:
ani jedna možnost není správná měj tabulku položka_v_inventáři (položka_id, inventář_id)
třída obalující inventář se bude starat o jeho správu (aby tam nebylo příliš mnoho položek, řešení duplicity, ...) |
||
zacatecnik Profil |
#12 · Zasláno: 20. 6. 2012, 19:06:46
Jenže když tam bude několik uživatelů, tak přece nebudu dělat pro každého tabulku s položkami v inventáři ne?
|
||
juriad Profil |
#13 · Zasláno: 20. 6. 2012, 20:07:46
tak inventář bude mít vlastníka, atribut user na tabulce inventář
dotaz na jména položkek všech inventářů uživatele bude vypadat: SELECT p.jméno, i.název FROM položka p JOIN položka_v_inventáři pvi ON p.id = pvi.položka_id JOIN inventář i ON pvi.inventář_id = i.id WHERE i.user = $USER_ID možná tvá aplikace má nějaká logická omezení, o kterých nemohu vědět, a struktura by měla vypadat jinak |
||
zacatecnik Profil |
#14 · Zasláno: 21. 6. 2012, 20:13:10
Prosím, poraďte tedy jak udělat ty tři třídy aby jedna byla hlavní atd. jak jsem už psal. Nikde jsem to na netu nenašel a nechci použít to co mě napadne protože to asi nebude dobře.
|
||
Jan Tvrdík Profil |
zacatecnik:
Říká ti něco „skládání tříd“ nebo také „kompozice“? |
||
zacatecnik Profil |
#16 · Zasláno: 21. 6. 2012, 20:40:38
Ne, každopádně já bych to asi řešil tak, že když je v té třídě vytvořím, pošlu jim $this a oni si to uloží jako soukromou proměnou a budou přes to moct volat ostatní...
To asi správně není ne? :D |
||
Alphard Profil |
#17 · Zasláno: 21. 6. 2012, 22:28:56
Moc přesně vám nerozumím. Přece nedává moc smysl, aby podřízená třída volala nadřízenou.
Udělejte si teda jednu hlavní, uvnitř ní libovolný počet instancí jiných tříd a ty pak můžete volat. class Child { public function someMethod() { // work } } class Main { private $child; public function __construct() { $this->child = new Child; } public function otherMethod() { $this->child->someMethod(); } } |
||
zacatecnik Profil |
#18 · Zasláno: 22. 6. 2012, 09:08:36
No, ale jde o to, že v té třídě Child, budu chtít volat třídu třeba Child2, vytvořenou ve třídě Main...
|
||
Jan Tvrdík Profil |
#19 · Zasláno: 22. 6. 2012, 09:14:56
zacatecnik:
Dokud nám neřekneš, co ty jednotlivé třídy představují a proč potřebují volat ty ostatní třídy, tak ti nelze rozumně poradit. Můžeme akorát hádat. |
||
zacatecnik Profil |
#20 · Zasláno: 22. 6. 2012, 12:50:21
No tak dám příklad:
Bude jedna hlavní a v ní vytvořím User, Articles. V User načtu data o uživateli a v classu Articles budu chtít zjistit, zda je uživatel admin, nebo tam budu mít třeba funkci, která mi vrátí nějaké hodnoty. Takže potřebuji aby mohli takhle komunikovat. |
||
Časová prodleva: 13 let
|
0