Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sens stosowania singleton w php
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Piszę sobie klasę do obsługi bazy danych i przyglądam się tak bardzo popularnemu wzorcowi singleton. Wszyscy jako przykład użyteczności tego wzorca podają przykład tworzenia instancji klasy do obsługi bazy, tzn połączenia z bazą. Zacząłem się zastanawiać gdzie jest sens, oczywiście w języku php. Zakładam, że mam taką klasę i w skrypcie łącze się z bazą danych, jeśli nie ma nawiązanego połączenia to tworzę obiekt tej klasy a jeśli jest to nie tworzę.

Wszystko jasne. Tylko gdzie jest sens stosowania tego w php. Przecież w skrypcie zazwyczaj tworzy się połączenie z bazą, wykonuje potrzebne operacje na bazie a po zakończeniu wywoływania skryptu, połączenie i tak jest zamykane automatycznie.. Więc jaki jest sens stosowania tego w php?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ActivePlayer
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


Singleton pozwala Ci uzyskać dostęp do obiektu w kazdym miejscu Twojej aplikacji. Nie wazne czy to uchwyt bazy danych, czy obiekt config czy cokolwiek co sobie wymyślisz.

Jeśli chcesz zrobić obiektową otoczkę Twojego korzystania z bazy danych najlepiej narysuj sobie schemat jaki obiekt ma za co odpowiadać. Ja generalnie stosowałem 3 obiekty.
1. DB_Connection - to był obiekt oparty właśnie o singleton, wewnątrz niego trzymałem uchwyt do db. Były tez tam 'logi' zapytań i inne pierdoły.
2. DB_Query - obiekt zapytania. Robiłem wtedy tak:
  1. <?php
  2. $query = new DB_Query("SELECT *...", DB_Connection::getInstance());
  3. $query->execute();
  4. ?>

3. DB_Result - to co zwróciła funkcja execute, w zaleznosci od zapytania wiersze albo inne bajery.

Singletona uzywalem w tym przypadku po to zeby mieć łatwy dostęp do połączenia z bazą. Dochodzi jeszcze kolejna kwestia, czy będziesz uzywać kilku baz danych na raz? bo jeśli tak - ja założyłem ze nie będę - to musisz inaczej zaprojektować swój system np.
  1. <?php
  2. $conn1 = new DB_Connection('localhost',...);
  3. $conn2 = new DB_Connectiion('otherhost', ...);
  4. registry::register('conn1', $conn1); 
  5. registry::register('conn2', $conn2); 
  6. // i potem gdzieś w kodzie
  7. $query = new DB_Query('...', registry::registered('conn1'));
  8. // lub jesli odwolujesz sie do drugiej bazy
  9. $query = new DB_Query('...', registry::registered('conn2'));
  10. ?>

Do tego powinienneś przemyśleć dodatkowo czy będziesz korzystał tylko z baz typu mysql? Jeśli nie wtedy DB_Connection powinno być interfejsem, a implementować i używać powinienneś DB_Connection_Mysql, DB_Connection_Pgsql itd...

Jest bardzo duzo zależności, musisz sam wszystko przemyśleć, a wzorce to tylko sposób implementacji. Radze Ci lepiej zacznij od poznania problemu, a dopiero potem szukaj rozwiązania. Bo tutaj pytasz o pewien sposób użycia singletonu, a nie do końca jestem pewny czy wiesz do czego chcesz go użyć.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 01:27