![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 1.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak tworzyć aplikacje, która będzie mogła działać na kilku bazach danych (niekoniecznie jednocześnie)? Korzystając z PDO. Tworzę zapytania SQL np. dla mysql, jednak te mogą się różnić w wypadku posgresql, więc jak to rozdzielić? Przecież nie będę tworzył osobnych paczek/plików dla konkretnej bazy. Zrobić to na klasach? Tylko że tworzenie klasy, do obsługi PDO jest chybione... Jak rozwiązujecie te kwestie u siebie?
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
http://nl3.php.net/manual/en/intro.pdo.php - drugi akapit już Cię informuje, że PDO nie ingeruje w żaden sposób w treść Twoich zapytań.
Możesz: 1. Skorzystać z jakiejś warstwy abstrakcji nad samą bazą danych - co i tak pewnie robisz korzystając z ORM-a (np. Doctrine). 2. Stworzyć osobną implementację dla każdego silnika bazy danych, tj.: a) Utworzyć paczkę z interfejsami (MyProject\DAO) oraz paczkę z implemetacją dla każdej z bazy danych (MyProject\DAO\Impl\MySQL, MyProject\DAO\Impl\PostgreSQL), ![]() PS. I oczywiście żadna z klas nie będzie tutaj obsługiwać PDO samego w sobie - będzie natomiast z niego korzystać. Ten post edytował Crozin 5.04.2012, 10:39:45 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 1.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Czy takie podejście byłoby dobre, biorąc pod uwagę że byłoby wykonywane w modelu (MVC)? Ten post edytował uncuncunc 6.04.2012, 09:37:14 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat tj.: a) Utworzyć paczkę z interfejsami (MyProject\DAO) oraz paczkę z implemetacją dla każdej z bazy danych (MyProject\DAO\Impl\MySQL, MyProject\DAO\Impl\PostgreSQL) Nawet nie próbuj tego robić w taki sposób jak zaproponowałeś bo się umęczysz z tym.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 1.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Za zwracanie danych (obiektów) ze źródła danych (np. bazy danych) odpowiedzialne są obiekty DAO. Dla każdego typu danych i każdego źródła danych powinieneś mieć osobny obiekt. Każde źródło danych może pobierać dane w sobie tylko znany sposób, ale powinno zapewniać wspólny dla wszystkich źródeł interfejs - dzięki temu w aplikacji będziesz mógł transparentnie korzystać z dowolnego źródła.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 1.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Czytam właśnie o tym, przegląda różne bazy i sposoby... i rozumiem samą ideę, jednak... To jest tylko nadbudówka, co nie wydaje mi się zbyt korzystne, bo muszę sam pisać interfejs, to tak jakbym chciał zrobić obsługę połączeń z bazami, gdy nie było PDO. Chociaż jakby się nad tym zastanowić, to coś w tym może być, a są jakieś spójne interfejsy lub nazewnictwo? Albo coś 'natywnego' w php? I jak nazywa się to:
Kod public function doSomething(SomethingDao $sthDao) { Chodzi mi o wywołanie klasy w metodzie, bo chce o tym poczytać. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Interfejsy DAO deklarują metody wykonujące operacje odczytu/zapisu danych biznesowych ze/do źródła danych, zaś samo PDO deklaruje metody pozwalające na połączenie aplikacji ze źródłem danych (w dodatu bardzo konkretnym), tak więc to nie do końca to samo.
![]() Cytat [...] a są jakieś spójne interfejsy lub nazewnictwo? Nie ma jakiś konkretnych wytycznych co do nazewnictwa. Z reguły interfejsy będą kończyły się przyrostkiem Dao/DAO (na sposób zapisu akronimów też nie ma jednoznacznej konwencji), a implementacje będą znajdować się w osobnej paczce (np. interfejsy w My\Project\Dao, a implementacje w My\Project\Dao\Impl\[Mysql|Postgres|Oracle|Mssql]).Cytat I jak nazywa się to: Ale tu jest tylko zadeklarowana metoda doSomething() z jednym argumentem, który musi być obiektem implementującym interfejs SomethingDao. Jeżeli o to Ci chodzi to nazywa się to type hinting.Kod public function doSomething(SomethingDao $sthDao) { Chodzi mi o wywołanie klasy w metodzie, bo chce o tym poczytać. Swoją drogą, z racji na to, że w większości SQL-owskich baz danych zapytania są niemal identyczne (mowa oczywiście o prostych operacjach), będziesz mógł utworzyć sobie jeden obiekt (dla każdego rodzaju danych), po którym mogłyby dziedziczyć implementacje specyficznych baz danych:
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:26 |