![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Stoje przed zadaniem napisania abstrakcji na bazy danych i mam dwa rozwiazania do wyboru:
1. zupelna abstrakcja od api az po pseudo skladnie sql, ktora ma byc identyczna dla kazdej z baz (lub zamiast skladni, budowanie zapytania, np. $q = $db->newQuyery( 'select' ); $q->addFields( array( 'ID', 'blabla' ) ); $q->addTable(... $q->limited( 3,5 ); subqueries triggers transactions itd... masa roboty, ale za to mam calkowita niezaleznosc od bazy, nie moge wykorzystac wszystkich mozliwosci bazy (np. triggery w psql -- w mysqlu chyba nie ma?) [aplikacja]<->[db layer]<-**[DB] lub 2. tworze tylko wspolne api -- sql bedzie recznie wpisywany i bedzie rozny dla roznych baz + tworze kolejna abstrakcje (dla kazdej z baz) zawierajaca podstawowe zapytanie uzywane przez aplikacje, np. pobierz dane usera, pobierz wszystkie newsy [aplikacja]<->[podstawowe operacje]<-**[db layer (bardziej API)]<->[DB] co jest latwiejsze (chyba) do napisania ale nie mam calkowitej niezaleznosci od bazy i przenoszenie na inna baze wymaga napisania nowych "podstawowych funkcji". Jak wy to rozwiazaliscie, ktore z rozwiazan sie sprawdza? A moze macie inne pomysly? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Problem ktory poruszyles jest dosc zlozony. Mozna do niego podejsc na roznorakie sposoby. Ja proponuje ci calkowicie uniezaleznienie sie od SQL i potraktowanie tabeli jako obiektu.
Nie bede na ten temat sie rozpisywal. http://rzseattle.piwko.pl/doObject/ tutaj znajdziesz stara dokumentacje do mojego obiektu obslugujacego baze danych. Dokumentacja obejmuje niezbedna podstawe do tego co ci jest potrzebne. Niestety obecnie dokumentacja nie nadaza za kodem wiec nie ma w niej opisanych bardziej zaawansowanych rzeczy. Jesli ktos ma podobne dokumentacje to chetnie je obejze. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 28.09.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
A może Propel?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Ja myślę, że wystarczy API, na tyle spójne aby obsługiwało kilka baz (MySQL, PostgerSQL, MSSQL, itp). Zwykle DB Layer składa się z niskopoziomowych funkcji. Można stworzyć klasę funkcji wysokopoziomowych jako dodatek. To jest moje zdanie.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo: A po co ty to w ogóle piszesz? Pisanie takiej biblioteki ma sens wtedy, gdy ma ona być lepsza (przynajmniej w czymś) od istniejących. A jest tego sporo, począwszy od prostych API, skończywszy na ORM. PEAR DB, ADODB, PDO, EZPDO, Creole, MetaStorage, Entity, Propel, DB_DataObject... większości nie znam, więc nie będę oceniał. Czym twoja biblioteka będzie się wyróżniać?
@rzseattle: większość z tego, co wymieniłem, to chyba właśnie ORM. Możesz obejrzeć dokumentację, ja się niestety nie znam na temacie. @Nievinny: jaki jest sens pisania własnego, spójnego API, skoro php ma takie API wbudowane? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@hawk -> dlatego aby współnym AIP obsłużyć MySQL, SQLite etc..
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
@Nievinny: powtarzam, jaki jest sens tworzyć wspólne API do obsługi MySQL, SQLite etc., skoro php ma wbudowane wspólne API do obsługi MySQL, SQLite, etc.?
Dla niewtajemniczonych: PDO. I w zasadzie to wbudowane ono dopiero będzie, na razie chyba trzeba sobie dociągnąć. Co nie zmienia faktu że będzie. |
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
@hawk: najpierw mial to byc prosty layerek, ale wzrpsly wymagania wbec niego i zaczalem wywazac otwarte drzwi. Dzieki za przypomnienie i linki (zaoszczedziles mi troche roboty (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Dobry pomysl z tym PDO (na razei jako PECL a od 5.1 w php). Biore sie za sprawdzanie Creola. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@hawk -> OK, ale czemu nie stworzyć własnego z dodatkowymi funkcjami, np Cache, lub zliczanie zapytań?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
@Nievinny: a czemu nie stworzysz od podstaw własnego parsera XML? Własnego silnika do regexpów? Własnego <tu wstaw dowolne rozszerzenie php>... Bo php już to ma.
Dlaczego nikt w Javie nie pisze własnego JSP? Nikt nie pisze aplikacji desktopowych pisząc najpierw własną implementację Swinga? Dlaczego wreszcie nie napisać w ogóle aplikacji w php zaczynając od reimplementacji od nowa w C samego silnika php? A konkretnie: jeżeli warto zaimplementować mechanizm cache (pewnie warto, bo PDO AFAIK nie ma), to chyba lepiej oprzeć się o PDO, niż pisać wszystko samemu od podstaw? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@hawk -> Czyli twoim zdaniem należy wykorzystać PDO i dodać do tego Cache?
Ale, PDO nie ma w PHP4, a ładowanie rozszerzeń za pomocą dl() to przesada, więc jak to zrobić w PHP4? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) |
|
|
![]()
Post
#12
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Przesiasc sie na 5ke.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo -> ja działam na PHP5, ale nie każdy zleceniodawca ma tę 5, więc nie da się inaczej. A poprosiłbym jeszcze o jakieś przykłady wykorzystania PDO?
|
|
|
![]()
Post
#14
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
A czytales cokolwiek o PDO?
Mozesz z nim zrobic to samo co ze standardowymi rozszerzeniami (mysql, psql, ...) tylko dla kazdego uzywasz tych samych metod (wspolne API) niezaleznie od bazy danych. |
|
|
![]()
Post
#15
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo Co do pierwszego rozwiazania to troche bedzie problem niby SQL to standard ale w roznych bazach rozne sie zapisuje, np limit - w ORACLE takie cos nie istnieje.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo -> czytałem i chodzi mi oto, że jakiś ksrypcik przykładowo... A pozatym jak admin serwera nie udostępni tych rozszerzeń? To co? Myślę, że dopuki nie będzie na standardzie to nie ma szans na skuteczne użycie zawsze i wszędzie...
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
@Nievinny: jak admin serwera nie udostępni rozszerzenia do <tu wstaw swoją bazę danych> to i tak nic nie będzie działać.
No dobra, skoro działasz na PHP4, to czemu nie chcesz używać ADODB? Trochę się czepiam, nie chodzi mi akurat o ciebie ani o to samo ADODB. Chodzi mi o to, że jest dla php wiele gotowych rozwiązań. Jedne już wchodzące jako standard (PDO), inne powszechnie używane. I co? I nic. Napiszmy wszystko od nowa. BTW, pomijając różnice pomiędzy PHP4 a 5, PDO nie jest rozszerzeniem, które może być lub nie być. Od PHP5.1 sprawa ma być prosta: masz obsługę np. MySQL = automatycznie masz PDO dla MySQL. BTW2, jak ktoś interesuje się PDO, to niech poszuka też o DBDO. Świat php nie jest jednomyślny, ale to są już dyskusje na znacznie wyższym poziomie merytorycznym. |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@hawk -> działam na 4 tylko kiedy zlecą mi wykonanie skryptu pod 4. Zwykle działam pod 5. I używam co prawda nie ADoDB, ale innego dobrego db layera. I chętnie zacznę używać gotowego PDO, tylko wskażcie mi, że admin servera na którym jest php powiedzmy 5.0.3 (lub inne z serii 5.0.x) udostępni rozszerzenie PDO dla skryptów to będe to wykorzystywał. Inaczej muszę używać mysql_cos lub sqlite_cos
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 25.04.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Hm, a ja mam do Was pytanie. Chcąc pisać skrypty, w miarę niezależne od typów baz, jednocześnie nie komplikując ich kodu, jak byście rowiązali problem dot. zwracania przez dany model, tych samych danych, ale przy różnych (w treści) zapytaniach.
Czy wyralibyście: A) tworzymy globalną tablicę typu:
Potem, odwołując się odpowiednio do tej tablicy:
B) Tworzymy oddzielne modele i sterownik bazy dla każdej z baz. C) Tworzymy jeden model, ale w każdej metodzie występuje switch.
D) Przygotowujemy oddzielne skrypty. z odpowiednią obsługą - najprostrze,ale najbardziej czasochłonne przy modyfikacjach. Szczerze mówiąc, wybrał bym wariant B. Co o tym myślicie? |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 28.09.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
e) Kozystamy z gotowego rozwiazania: ezsql, adodb, creole. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Btw: przyklady troche bez sensu, bo we wszystkich tych bazach zapytania maja niemal identyczna strukture (selecty we wszystkich), wiec po co do kazdej bazy dawac inne zapytanie (ktore de facto bedzie identyczne? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:42 |