Adatbázis és hibakezelés felsőfokon
Sziasztok!
Kaptam egy jó kis projectet, amit a közeljövőben kell majd elkezdeni. Szakmailag kihívásnak tekintem, habár jelenlegi tudásommal is simán meg tudnám csinálni, csak nem mindegy hogyan(!), így úgy döntöttem, hogy rátanulok és megpróbálom a lehető legprofibbra megírni. Viszonylag kevés tapasztalatom van OOPban, ezért lenne pár kérdésem...
1. Szeretném - ha úgy döntene az ügyfél, hogy átpakolja a lapot egy másik szerverre - akkor ne legyen belőle túl sok utómunka. Alapvetően MySQL lenne a DB. mysqli kiterjesztéssel gondoltam kezelni és arra gondoltam, hogy létrehozok egy interface-t, ami kiköti miket kell megvalósítani egy pl. DB_MySQL.php osztályban. Egy ilyen példát láttam neten... (ez most nem mysqli, mert csak példa)Azt értem, hogy MSSQL-re váltásnál csak egy DB_MSSQL.php-ben csak mssql_query -re kellene átírnom a függvényt, de mi van akkor ha "logikában lévő" lekérdezés nem fut le az új adatbázison? Elképzelhető, hogy annyira különbözni fognak SQLben, hogy az új adatbázis nem érti meg a lekérdezést? Elég gáz lenne, hisz végig kellene nézni az összes oldalt. Elképzelhető h ilyen probléma lesz? Mit lehet ez ellen tenni? A lekérdezéseket is osztályba kellene foglalni?
2. Hibakezelés. Az lenne a cél, hogy hiba esetén kiírjunk valami egyszerű hibaüzenetet és a bővebb információt lementsünk, mondjuk adatbázisba, de nem is ezzel van a gond. Nem teljesen értem a kivétel kezelést. Értem, hogy kivételt kell dobnom ha valami nem oké, de a try catch blokkokat hova kellene tennem? Egy osztályon belül sok metódus van. Mindegyiken belül legyen try catch? Vagy az egész osztályt kellene try-ba tennem? Szóval nem teljesen értem, hogy ha több osztályt használok, akkor hogy lehet ezt a hibakezelést központosítani. A PHP felsőfokon című könyv is csak egy metóduson belül mutatja meg a hibakezelést, de azt h több osztály esetében ez h megy azt nem sajna :(
ui: Angolul tudok, ha valaki linkelni szeretne valami jó kis leírást, amit még nem találtam meg :P :)
Köszönöm mindenkinek a segítséget előre is!
■ Kaptam egy jó kis projectet, amit a közeljövőben kell majd elkezdeni. Szakmailag kihívásnak tekintem, habár jelenlegi tudásommal is simán meg tudnám csinálni, csak nem mindegy hogyan(!), így úgy döntöttem, hogy rátanulok és megpróbálom a lehető legprofibbra megírni. Viszonylag kevés tapasztalatom van OOPban, ezért lenne pár kérdésem...
1. Szeretném - ha úgy döntene az ügyfél, hogy átpakolja a lapot egy másik szerverre - akkor ne legyen belőle túl sok utómunka. Alapvetően MySQL lenne a DB. mysqli kiterjesztéssel gondoltam kezelni és arra gondoltam, hogy létrehozok egy interface-t, ami kiköti miket kell megvalósítani egy pl. DB_MySQL.php osztályban. Egy ilyen példát láttam neten... (ez most nem mysqli, mert csak példa)
public function query($query) {
return mysql_query($query, $this->link);
}
2. Hibakezelés. Az lenne a cél, hogy hiba esetén kiírjunk valami egyszerű hibaüzenetet és a bővebb információt lementsünk, mondjuk adatbázisba, de nem is ezzel van a gond. Nem teljesen értem a kivétel kezelést. Értem, hogy kivételt kell dobnom ha valami nem oké, de a try catch blokkokat hova kellene tennem? Egy osztályon belül sok metódus van. Mindegyiken belül legyen try catch? Vagy az egész osztályt kellene try-ba tennem? Szóval nem teljesen értem, hogy ha több osztályt használok, akkor hogy lehet ezt a hibakezelést központosítani. A PHP felsőfokon című könyv is csak egy metóduson belül mutatja meg a hibakezelést, de azt h több osztály esetében ez h megy azt nem sajna :(
ui: Angolul tudok, ha valaki linkelni szeretne valami jó kis leírást, amit még nem találtam meg :P :)
Köszönöm mindenkinek a segítséget előre is!
AdoDB
ui: lehet valami php keretrendszerrel kellene megismerkednem?
Zend Framework, DB minták
Ha nem akarsz ennyi erőforrást rááldozni, - meg egyébként is - vess egy pillantást az adatbázismintákra (Active record, stb.), és zárd be az adatbáziskommunikációt egy modell rétegbe. Így később egyszerű(bb)en át tudod alakítani.
Példa:
PDO
üdv,
Balázs
try catch
pl.
előző példára egy használat példa :)
Zend_Db_Select kell neked
Tiszta sör, mármint sor
Rendben, tehát az adatbázisokkal való kompatibilitásra akarok törekedni mindenek felett, akkor Zend Framework...
erenon, error
Ez a controller, modell, view nem teljesen világos. Ahány osztály, annyi controller és modell fájl kell. A modellben van az összes adatbázis kezelés. A controll meg gondolkodik (logika) és használja a modellen keresztül az adatbázist. Hány view osztály kell? Egy? A controll meghívja a view metódusait és beállít értékeket, amit aztán a view csak kiírat?
szabo.b.gabor
és te melyiket ajánlod? mert akkor végülis 1 try ba is bele lehetne tenni mindent, nem? és ha jól emlékszem, akkor hibakódot is be lehet állítani, ami alapján aztán catchen belül lekezelhetjük különböző hibákat. vagy származtatok annyi féle exceptiont amennyi kell.
ha dobok egy exceptiont, akkor a kód fordítása ott annál a pontnál azonnal megáll, jól gondolom? ha előtte módosítottam egy változót, akkor annak az értéke nem fog visszaállni ugye?
Köszönöm a segítséget!
Nézd a profikat
-Ne találd fel a kereket újra. De még csak meg sem próbáld.
Ha ráérsz, ásd bele magad valamelyik PHP frameworkbe (Zend, Symfony, CakePHP), vagy akár a Drupalba, és elemezd, hogy mit miért csináltak. A Zend MVC kiépítése szerintem elég logikus és lényegretörő, de bármely más nagy kódjából rengeteget lehet tanulni.
Így sokkal gyorsabban megérted majd, hogy mi a model, mi a view és a controller; kár sokat gondolkozni rajta ,)