Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
#1 · Zasláno: 6. 11. 2012, 08:13:21
V procedurálním programování se mi osvědčily pomocné funkce pro rutinní převod hodnot podle zdroje a účelu.
např. post2db() { /* příprava $_POST hodnot pro zápis do db */ } db2form() { /* výpis hodnoty z databáze do pole formuláře */ } db2text() { /* výpis hodnoty z databáze do HTML */ } ... Některé sekvence závisí na nastavení serveru, takže je výhoda, když se dají změnit na jednom místě. Při výrobě obdobného 'nářadí ' v OOP nějak nevím kam s nimi. Tématicky spolu souvisí, vyskytovat se ale mohou ve všech třídách. Napadá mě dát je všechny do zvláštní statické třídy, to ale zjevně neposkytuje žádnou výhodu, jen neříjemně prodlužuje zápis: post2db() na MyFce::post2db() . Z praktického hlediska bych je nechal tak, jak jsou, v samostatném souboru. To ale asi není moc OOP. Kam s nimi? |
||
mimiru Profil * |
#2 · Zasláno: 6. 11. 2012, 09:21:48
pokud jsou to skutečne samostatné univerzální pomocné funkce napříč celou aplikací (což dle mého uváděné příklady rozhodně nejsou) tak je můžeš klidně nechat i jako funkce v samostatném souboru. pokud používáš namespace tak pak bude výhodnější použít třídu se statickými metodami - zase o tolik delší ten zápis není
|
||
Alphard Profil |
#3 · Zasláno: 6. 11. 2012, 13:07:55
Např. post2db() udělat jako součást databázové vrstvy, protože escapování závisí na konkrétní databázi a je potřeba jen při práci s databází. Ty další v závislosti na potřebě aplikace buď jako metody nějaké třídy String, nebo je dát to šablon, nejsou-li třeba jinde.
|
||
span Profil * |
#4 · Zasláno: 6. 11. 2012, 15:52:43
Môžu byť tiež vo vlastnej triede typu "common", a každá ďalšia trieda ktorá bude použivať tieto funkcie, jednoducho tú triedu "common" rozšíri.
Napriklad: class dbHandler extends common {} |
||
hugo Profil * |
#5 · Zasláno: 7. 11. 2012, 10:03:30
zalezi od konkretnej situacie, ale ked taketo funkcie chces mat v classe, tak pouzi staticke metody.
Napriklad si vytvorit classy StringUtils, MathUtils, FileUtils atd.. a potom v nich budes mat napriklad: StringUtils::urob_neco1(); StringUtils::urob_neco2(); MathUtils::urob_neco1(); |
||
Alphard Profil |
#6 · Zasláno: 7. 11. 2012, 10:23:11
|
||
span Profil * |
#7 · Zasláno: 7. 11. 2012, 12:23:17
[#6] Alphard
Vo všeobecnosti zaleži aj na tom či konkretnu metodu bude použivať iba jeden potomok alebo viacero. |
||
Časová prodleva: 11 dní
|
|||
nethor Profil |
#8 · Zasláno: 18. 11. 2012, 09:35:33
Mno, jak se teď OOP prokousávám,
připadá mi, že by se měly zapsat do interface. To je mimochodem i slovo, které skupinu těchto fcí celkem přesně vystihuje. |
||
Tori Profil |
#9 · Zasláno: 18. 11. 2012, 10:17:02
nethor:
„připadá mi, že by se měly zapsat do interface.“ No ale týkají se přece různých oblastí - úprava vstupních dat pro uložení do DB vs. úprava dat (libovolného původu) před odesláním na výstup v kontextu HTML. Mně třeba spíš než rozhraní (které vnímám - možná chybně - víc jako "dohodnutý způsob komunikace" než "spojení dvou [odlišných] vrstev") připomněly návrhové vzory Adapter nebo Bridge. |
||
Joker Profil |
#10 · Zasláno: 18. 11. 2012, 14:11:55
nethor:
Stejně jako Alphard si myslím, že escapovací funkce patří do třídy spravující připojení k dané databázi. U těch dalších mi není úplně zřejmé, co by měly dělat. Třeba „výpis hodnoty z databáze do pole formuláře“ má udělat co? Jestli to je zase escapování, tak v první řadě na to už v PHP funkce existuje (htmlspecialchars). Jestli to je opravdu metoda, která dostane nějakou identifikaci záznamu v databázové tabulce a vypadne z ní HTML kód, tak pokud to není zrovna aplikace na správu databáze, přijde mi podezřelé, proč by něco takového potřebovala. |
||
Časová prodleva: 11 let
|
0