Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziedziczenie klas
busterek
post 8.12.2015, 09:15:58
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Łódź

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


Witajcie.
Pewnie mnie zaraz objedziecie jak beczkę od smoły. Ale trudno.
Piszę sobie aplikację. Opieram ją oczywiście o klasy. Chciałbym jednak wprowadzić dziedziczenie. Tylko za bardzo nie wiem czy kontrukcja, którą obrałem jest poprawna. Stworzyłem dwie klasy abstract: jedna do obsługi bazy danych, a druga do generowania elementów html. Klasa bazodanowa dziedziczy po klasie elementów. Następnie stworzyłem zwykłą klasę - classMain, która dziedziczy po klasie bazodanowej i zawiera metody do załadowania elementów strony, do wyświetlenia strony etc. I teraz chcę stworzyć kolejna klasę do obsługi wydzielonej części aplikacji - obsługi zgłoszeń. I teraz nie wiem, czy ta klasa ma po czymś dziedziczyć? Najpierw chciałem, żeby dziedziczyła po klasie bazodanowej. Ale to trochę dziwnie, bo stworzy się drugie połączenie do bazy danych. Potem pomyślałem, że lepiej tą klasę zainicjować w klasie classMain i żeby nie dziedziczyła po niczym i do metod przekazywać pobrane dane w klasie classMain.
Zdaję sobie sprawę, że to w zasadzie infantylne pytanie. Ale czytam te poradniki odnośnie dziedziczenia i ni w ząb tego nie mogę rozwiązać. A klas obsługującyh kolejne cześci aplikacji będzie przybywało. Pomożecie?
Go to the top of the page
+Quote Post
Pyton_000
post 8.12.2015, 09:20:49
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Źle się do tego zabierasz. Dziedziczenie nie służy temu żeby np. tak jak w Twoim przypadku "odziedziczyć" połączenie z bazą.

Dziedziczenie opiera się na podobieństwie obiektów i ich powiązaniu np.

Kwadrat dziedziczy po Figurze bo mają wspólne elementy.
Natomiast Samochód już nie może dziedziczyć po Figurze bo nie ma nic wspólnego.

Wszelkie zależności typu połączenie do BD itp. przekazuj jako parametry w kostruktorze klasy w której tego chcesz używać. Zowie się to Dependency Injection (DI) i było parę tematów niżej.
Go to the top of the page
+Quote Post
busterek
post 8.12.2015, 12:58:35
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 30.07.2006
Skąd: Łódź

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


Dzięki za odpowiedź. Przeczytałem również wskazany przez Ciebie wątek. Wszystko mniej więcej rozumiem. Ale nasuwają mi się kolejne pytania.
Mam klasę obsługującą bazę danych: classDb. Są w niej metody (settery i gettery) wykonujące zapytania, pobierające dane etc. Odrębną klasą jest classMain, gdzie jak wspomniałem wcześniej są metody do wyświetlania pobranych danych. Ale będą też klasy do obsługi poszczególnych części: np klasa do obsługi zgłoszeń, gdzie chciałem umieścić metody np pobierania nowych zgłoszeń, przypisania zgłoszenia do użytkownika etc. Moje pytanie brzmi: jak w klasie obsługującej np. część zgłoszeń korzystać z metod klasy BD?
Go to the top of the page
+Quote Post
Pyton_000
post 8.12.2015, 17:19:42
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Słabo czytałeś wink.gif

Primo klasa obsługi bazy powinna obsługiwać tylko możliwość wyciągania, zapisywania, aktualizacji itp.
Potem robisz sobie klasę np. UserRepository która to dostaje w konstruktorze obiekt implementacji dostępu do danych (może to być DBHandler, FileHandler, SessionHandler) implementujące wspólny interface. Dzięki temu nie uzależniasz się od konkretnej implementacji co za tym idzie możesz kiedyś hipotetycznie wymienić BD na pliki itd.

Dalej... Mając system zleceń również tworzysz sobie np. TaskRepository (nazwa nie istotna) która będzie Ci obsługiwała operacje odczytu, zapisu, usuwania itd). I tu znowu nie czepiasz się implementacji.

To tak skrótowo wink.gif

TL;DR
Obiekt połączenia BD przekazujesz w konstruktorze obiektu który takowego potrzebuje. Nic globalnie...
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.05.2024 - 02:37