![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zagadnienie, które mnie nurtuje to jak zorganiwazować połączenia z bazą danych w bibliotekach (zbiorach funkcji) a mianowicie dokładnie
(*) klasy reprezentujące rekordy poszczególnych tabel zgodnie z filozofią Active Record posiadają klasę bazową baseClass, która w konstruktorze wywołuje połączenie z bazą danych (to jest dobre ![]() (*) teraz przystępuję do pisania zbioru funkcji, łączonych w biblioteki, będą to funkcje zwracające z bazy MySQL różne tablice z danymi np:
itp Pytanie brzmi: o ile dla klas połączenie było realizowne w kontruktorze, to jak lepiej zrobić to dla zbioruy takich funkcji bibliotecznych. 1) czy lepiej w ciele każdej z tej funkcji łączyć się i rozłączać z bazą danych 2) czy może lepsze jest zastosowanie parametru przekazującego obiekt PDO
3) a może nieładnie skorzystać z globalnego obiektu odpowiedzialnego za połączenie? Zastanawiam się jak się będzie to miało do wydajności (szybkości działania) aplikacji w momencie gdy będą wykonywane duże ilości takich zapytań w jednym skrypcie? Jak państwo rozwiązujecie takie problemy? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem najlepiej będzie zastosować albo wzorzec Registry albo Singleton.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
a wydawało mi się to juz skrajnie jasne - połączenia z bazą zawsze trzymam jako singleton - bo mam w 99% jedno. Jesli mialo by byc wiecej uzylbym registry.
Cytat czy lepiej w ciele każdej z tej funkcji łączyć się i rozłączać z bazą danych Mi zawsze wydawało się ze laczysz sie na starcie (ew przy 1 zapytaniu), a rozłączasz na koncu. Wg Twojego podescia mialbys sie łączyc i rozłączac pomiedzy kazdym zapytaniem? ![]() Cytat czy może lepsze jest zastosowanie parametru przekazującego obiekt PDO Lepsze ale troche nie wygodne. Ja juz sie praktycznie zakochałem w moim 'DB_Connection::get_instance()', nawiasem mowiac php4kowym ![]() Cytat 3) a może nieładnie skorzystać z globalnego obiektu odpowiedzialnego za połączenie? No, czyli takie 'registry', przy 1 pobraniu obiektu tworzysz db_connection, a potem za kazdym razem zwraca jego instancje. simple, wydajnie i ogolnie gra muzyka : ) |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
A poza tym mówienie o wzorcach w stylu ActiveRecord i zostosowanie ich w zbiorach funkcji, zamiast w obiektach wzorca DomainModel lub podobnych brzmi nieco śmiesznie
![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 276 Pomógł: 3 Dołączył: 22.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@Matid, żle mnie zrozumiałeś (albo ja wyraziłem się niezbyt precyzyjnie ?), wzorzec Active Record nie ma nic wspólnego ze zbiorami funkcji, chodziło mi tylko o pokazanie, że w tworzonym obiekcie, w jego konstruktorze wywołuję połączenie z bazą danych, przestaje istnieć obiekt, przestaje istnieć połączenie.
Jak się zapewnie domyślasz funkcje, które tutaj przytoczyłem, będą znajdowały sie w panelu administracyjnym. Admin/użytkownik pobiera np informacje o nieaktywowanych (=niezaakdeptowanych przez niego) forach, następnie gdy zaznaczy któreś z nich dopiero wtedy "do gry" wejdzie obiekt wg wzorca Active Record, który wczyta dane (jeden wiersz) dotyczace tego forum, zaktualizuje pole odpowiedzialne za aktywowanie ot tyle. Tyle w kwesti wyjaśnień (tutaj swego czasu gdy zaczynałem przygode z php5 uświadamiali mnie o wzorcach) Teraz miałbym prośbę, do osób, które się w tych wątkach już wypowiadały (albo zamierzają ![]() Jeśli nie sprawi Wam to problemu, może pokazalibyście jak macie rozwiązane w swoich frameworkach poruszone przeze mnie kwestie dotyczace połączeń z bazą? Poniżej moja klasa bazowa, po której dziedziczą wszystkie następne klasy w tym te korzystające z wzorca Active Record
Czekam na uwagi Zdrawim Ten post edytował Aztech 16.03.2006, 20:11:23 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Co do ActiveRecord, to ja chcę u siebie zaimplementować bardziej dynamiczne rozwiązanie, odwzorowujące w czasie rzeczywistym stan bazy danych, więc np. utworzenie obiektu Post, który będzie odwzorowywał tablicę posts w bazie danych wyglądałoby tak:
Podobnie wygląda to w Ruby on Rails. A co do sprawdzonych źródeł wzorców, m.in. Registry: PoEAA (Patterns of Enterprise Application Architecture). W polskim wydaniu opis wzorca Registry znajduje się na s. 438. A co do mojej implementacji tego wzorca - u mnie jest to po prostu kontener, nie zawiera on metod tworzenia obiektów, jeśli one nie istnieją, a jedynie udostępnia globalny intefejs dostępu do przechowywanych obiektów. Brakuje mi jeszcze w moim rozwiązaniu implementacji wzorca IdentityMap, lub czegoś podobnego, co zapewni unikalność obiektów - chwilowo są to tylko nazwy wpisów w rejestrze. Wygląda to mniej więcej tak:
A tak wygląda klasa kontenera, którą Registry rozszerza.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 19:00 |