Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> baza danych koncepcja obiektowa
collecter
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 22.10.2010

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


Poniewaz dopiero od niedawna mam stycznosc z objektowym projektowaniem w php, mam jedno pytanie ktore przysparza mie sporo trudnosci. Dotyczy ono polaczenia z baza danych i pozniejszego jego wykorzystywania. Zalozmy ze mamy kilka klas korzystajacych z bazy danych. Czy w waszych aplikacjach na poczatku pliku tworzycie polaczenie ( za pomoca funkcji mysql connect ) i dolaczacie ten plik do kazdej strony, a w waszych klasach zakladacie ze polaczenie zostalo juz wczesniej otwarte i uzywacie komend mysql query a na koncu strony zalozmy w pliku footer.php zamykacie polaczenie? Czy moze tworzycie klase mysql z komendami query itd. I kazda klasa korzysta z jej instancji i metod.

Chcac dac przyklad zeby to lepiej zobrazowac zalozmy ze mam klase User i metode setName. Czy w metodzie setName uzywacie bezposrednio komendy mysql update liczac ze polaczenie zostalo otwarte wczesniej (nie w tej klasie, a dolaczone w pliku do kazdej strony) czy moze w tej metodzie tworzycie instancje klasy MYSQL (stworzonej przeze mnie i np laczycie sie z baza w konstruktorze) i korzystacie z jej metod zeby wykonac operacje na bazie danych.

Mam nadzieje ze nie zagmatwalem tego za bardzo.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
smentek
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Jakąkolwiek warstwę abstrakcji wybierzesz (PDO jest bardziej nowoczesne) ważne jest aby dostęp do niej następował przez obiektowy interfejs, oraz aby nie inicjalizować połączenia cześciej niż to konieczne, a także nie tworzyć nadmiarowych instancji obiektu obsługującego połączenie.

Najprostsze rozwiązanie (nie znaczy najlepsze): Opakowujesz obiekt z połączeniem do bazy w singleton, (tylko jedna instancja) tak że siedzi on sobie jako zmienna w nowo utworzonej klasie. W konstruktorze lub w którejś metod wywoływanych w konstruktorze ustawiasz połączenie którego używasz później. W ten sposób możesz go wyciągnąć w dowolnym miejscu w swoim systemie.

Oczywiście twój obiekt nie powinien powielać całego interfejsu PDO. Służy jedynie inicjalizacji połączenia, wszystkie metody są wywoływane na właściwym obiekcie z ustawionym połączeniem.

Tą samą funkcjonalność można osiągnąć bez singletonu, ale jest to już trudniejsze do osiągnięcia, ponieważ wymaga przekazywania obiektu jako zmiennej do miejsc w których będzie wykorzystywany.
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: 30.12.2025 - 08:59