![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak poprawnie wyświetlać dane z bazy danych zgodnie z OOP? Czy konstrukcja:
, a potem wyświetlenie zmiennej jest poprawna w ujęciu programowania obiektowego? Dlaczego, dlaczego nie? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 664 Pomógł: 169 Dołączył: 8.01.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
W programowaniu obiektowym baza danych to tylko miejsce, w którym dane stałe są zapisywane. Od zarządzania tymi danymi masz modele, czyli klasy, które charakteryzują logikę Twojej aplikacji. Oczywiście musisz posiadać klasę, która stworzy Ci model na podstawie danych z bazy (w Twoim przypadku kolekcje modeli). Może to być osobny obiekt (co jest chyba najlepszym rozwiązaniem) bądź sama klasa modelu może posiadać mechanizm do wyciągania tych danych. Drugie rozwiązanie jest o tyle niezbyt pożądane, że w przypadku, gdy musisz zmienić miejsce przechowywania danych np. z bazy MySQL na pliki XML, to musisz dotykać klas, które powinny być odpowiedzialne jedynie za logikę, a więc niezależne od miejsce przechowywania danych.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio też się nad tym głowiłem.
W różnych mini frameworkach tworzona była klasa model i klasa obiektu np. model i obiekt książki. Np pobranie 10 książek to utworzenie 10 obiektów typu "książka". Wszystko ładnie i pięknie ale gdy robiłem klasę użytkowników gdzie jeden użytkownik miał ponad 20 atrybutów to konstruktor wyglądał nieciekawie i niestety nie udało mi się utrzymać tej konwencji. PDO (mysql_ też) może zwrócić wiersz jako obiekt ale wydaje mi się to sztucznym rozwiązaniem. Też jestem ciekaw jak to wygląda w praktyce. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 664 Pomógł: 169 Dołączył: 8.01.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@markonix zawsze możesz zastosować Proxy. Np.
10 książek to kolekcja obiektów. Kolekcja też sama w sobie jest obiektem. I przy tworzeniu tej kolekcji wyciągasz podstawowe informacje nt. książek (np. tytuł, + autor). Natomiast jeżeli potrzebujesz wykonać jakieś bardziej złożone operacje na książce, to dopiero tak naprawdę jest tworzony obiekt. To samo z użytkownikami. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Gdy do wszystkiego podchodzę od strony obiektu mysqli czyli new mysqli(...) to pojawia się problem i nie jestem zdecydowany do do tego jak go rozwiązać.
Wiadomo, że do mysql łączyć się będę tylko jeden raz, ale obiekty stworzone poza klasą nie są w niej dostępne. Więc moje pytanie jest następujące, czy używać sobie takiemo menadżera, który napisałem:
i wywoływać ten stary egzemplarz MySQLiQueryManager czy może zostać przy strukturze proceduralnej mysqli na potrzeby użycia w klasach? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ciekawe podejście do singletona (IMG:style_emoticons/default/wink.gif)
A tak serio to nie musisz robić statycznej instancji połączenia z DB. Wystarczy, że do obiektów typu Users będziesz przekazywał (np. w konstruktorze) instancję MySQLiQueryManager. Np:
Poza tym używanie func_get_args(); w konstruktorze MySQLiQueryManager to BAAARDZO zły pomysł. Co z podpowiadaniem składni w IDE? Po roku już zapomnisz co musisz przekazać w konstruktorze! Zmień to na __construct($username, $password, $host,...) Kolejna baaardzo słaba rzecz:
To powinno wyglądać np. tak:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 13:08 |