![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 2 Dołączył: 22.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
zaczynam pisać pewną aplikację (prosty CMS do pisania artykułów), dodam iż celem jest tylko zdobycie wiedzy i doświadczenia w OOP. Program: posiadam dwie klasy, jedna łaczy się z bazą danych, druga jest odpowiedzialna za dodawanie artykułow do bazy. Czy tworzenie obiektu oConnectionClass wewnątrz klasy ArticleClass to jest dobrym rozwiązaniem? Wiem, ze napewno można to zrobić inaczej ale to rozwiązanie tez działa. Mam klasę do połączenia z bazą MySql:
A tutaj mam klasę ArticleClass:
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Jak dla mnie to Connection powinno być abstrakcją. Nie skazuj się z góry na fakt, iż będziesz miał do czynienia z obiektami, które PDO obsłuży, bo się możesz przejechać. Przykład? Artykuły wręcz proszą się o połączenie ich z bazami noSQL lub silnikami pokroju Sphinx. Weź też pod uwagę, że możesz mieć inny cel zapisu niż baza. Sama klasa Article chcąc, nie chcąc, będzie korzystać z jakiegoś połączenia. Jeśli nie do zapisu, to do odczytu. Tylko, że IMHO powinno to połączenie być przekazywane jako obiekt dla odpowiednich metod lub w ostateczności jako parametr dla konstruktora (Dependancy Injection się kłania).
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 2 Dołączył: 22.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Twoj post daje do myślenia. Pomysl z abstrakacja wydaje sie ze rozwiazal moj problem.
A mam jeszcze takie pytanie odnośnie otwieranie połaczenia i zakonczenie połaczenia z bazą. Założmy ze bede korzystac z jednej bazy na jednym hoscie. Lepiej tworzyc i zamykać polaczenie w kazdej metodzie ktora zapisuje/odczytuje dane . Czy poprostu na poczatku strony np. index.php raz otworzyć polaczenie i raz zakonczyc gdzies na koncu. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, że tylko raz utworzyć połączenie (inaczej zabijesz sobie serwer, wydajność itp)
Dlatego saveArticle do przepisania ;-) Poza tym czemu obiekt Article ma wiedzieć coś o Connection? Zrób dodatkową warstwę, tak aby on nic nie musiał wiedzieć o bazie. Dopiero ta pośrednia warstwa będzie Ci służyć do zapisu/odczytow artykułów z bazy. Dzięki temu ten sam obiekt Article będziesz mógł np naturalnie raz pchać do mysql, a raz do zupełnie czegoś innego. (Jak wspominał @thek) -------------------- Linkedin | ...
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Ależ ja o tym napisałem ano. Zauważ, że obiekt Connection w sumie nie mówi nic o celu zapisu. To jakiś abstrakcyjny byt. Tak naprawdę wystarczy by klasa Article w tym wypadku miała metody get i set. Get z parametrem tablicowym szukało by pasującego do podanych kryteriów lub zwracało ewentualnie pusty obiekt klasy Article. Zależy czy chciałbyś połączyć get z ewentualną osobną metodą find czy nie. Set z tablicą zapisywało by takowy obiekt lub tworzyło nowy.Tu nie muszę wiedzieć czy celem operacji jest baza, xml czy cokolwiek. To bym w konfiguracji sobie zdefiniował jako driver, który dostarczyłby mi implementacji interfejsu. Oczywiście to tylko jedna z metod na szybko. Lepiej byłoby to jeszcze bardziej uniwersalnie zrobić.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 01:06 |