![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 31.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, postanowiłem na poważnie zabrać się za naukę OOP. W tym celu założyłem sobie stworzenie aplikacji webowej która będzie pomocna w bibliotece. Mianowicie będzie można wypożyczać książki, sprawdzać ich dostępność itd.
Jak na razie stworzyłem bazę danych i kilka podstawowych klas m. in. klasę do obsługi bazy danych. Mam wielką prośbę do osób, które znają się lepiej na OOP czy konwencja jaką przyjąłem i sposób pisania kod są odpowiednie. Liczę na przydatne wskazówki i uwagi. Poniżej listing klasy do zarządzania bazą danych i listing klasy logowania.
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 10 Dołączył: 8.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
dlaczego static lepiej tworzyć obiekt przez singleton i dalej używać instancji. dlaczego foo? a nie $db dlaczego mysqli nie PDO? "localhost","root","","biblioteka" <---? Dlaczego brakuje pliku konfiguracyjnego. ![]() ![]() ![]() ![]() ![]() ![]() OOP to nie wkładanie metod do klas... O wzorcach architektonicznych narazię pomilczę.
ma zalogowac i zwrocic true (or ID and LVL) lub false nic poza... tak myślę. opisuj metody inaczej się pogubisz za tydzień otworzysz kodzik i zapytasz sam siebie o co temu gościowi chodziło ![]()
raczej $this->isPassword ewentualnie $this->isNumeric or $this->isString a w ogóle nie extends Walidacja tylko Walidacja jako helper czym jest helper niczym wiecej jak klasą niepowiązaną która zawiera np statyczne metody walidacji danych bądź jak się później okażę podczas tworzenia w MVC nie będą statyczne dla prostoty... ja zapis mam taki sam jak w CI a więc $this->Validate->string(); ale to tylko dlatego że pewna metoda ładuje mi z automatu potrzebne biblioteki ale jest to metoda loader nie rozszerzenie o klasę.
Nie nie nie ... Ma być ładna nazwa według PSR-0 http://phpedia.pl/wiki/Konwencja_nazewnictwa_PSR-0
a nie można tak password? poza tym SELECT nie select tak się dużo lepiej czyta. i dlaczego
raz nie temp tylko co najmniej $db opisowo opisowo... w tempie to możesz przechowywać obrazki (folder). Co by tu jeszcze nie Db db(); albo lepiej new dataMenager(). I wywołujesz to nie poza klasą tylko w metodzie w której chcesz coś wyciągnąć jako singleton bardzo prosty wzorzec. a Jest 5 rano wiec jak cos pomieszałem niech mnie ktoś poprawi bo ogólnie to myślę że na OOP jeszcze nieco za wcześnie ale kto nie walczy z trudnościami ten stoi w miejscu co nie? ![]() Ten post edytował KotWButach 27.10.2012, 04:08:33 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
nie wiele tutaj do oceniania, ale z moich uwag to tak:
- osobiście wybrałbym PDO, ale mysqli też w ostateczności może być; - w Twoim przypadku klasa do obsługi bazy danych jest bez sensu, ponieważ nie wprowadza nic nowego, sam obiekt mysqli/pdo jest wystarczający; - jeżeli klasa potrzebuje czegoś z zewnątrz to powinna to otrzymać w konstruktorze, czyli przykładowo zamiast tworzyć metody statyczne w obiekcie bazy, przekazujesz obiekt bazy w konstruktorze i wywołujesz zapytanie w metodzie przez $this->_db->query("SELECT...") oraz w Twojej klasie Db dane logowania również powinny zostać przekazane w konstruktorze; - najlepiej jakby sesja również była przekazanym obiektem, ponieważ w pewnym momencie możesz stwierdzić, że chcesz samodzielnie obsługiwać sesję na bazie, ale przy pierwszych krokach to raczej mało istotne. - w klasie nie powinny znajdować się funkcję typu echo, print, ponieważ model logowania ma odpowiadać tylko za autoryzację, a nie za wyświetlanie widoku, więc tutaj powinno być tylko return true/false. - Klasa logowanie nie powinna być dziedziczona po Walidacji, ponieważ logowanie tylko korzysta z walidacji, a nie jest jego wyspecjalizowaną formą, dlatego obiekt walidacji powinien zostać przekazany w konstruktorze. - ogólnie działanie klasy Logowanie jest kompletnie pomieszane, w linijce 29 w zapytaniu używasz $this->getLogin(), ale przecież nigdzie wcześniej nie zdefiniowałeś tej zmiennej więc będzie ona pusta, tak samo z $this->getPassword() w 35 linijce. Chyba się do końca nie zastanowiłeś jak to powinno działać. - i jeszcze jedna rzecz, która jakoś szczególnie mnie irytuje to pomieszanie polskiej i angielskiej nomenklatury, generalnie składania php, mysql, html, css, js jest po angielsku więc najlepiej naucz się nazywać wszystko po angielsku, bo wtedy wszystko jest o wiele bardziej przejrzyste. Powiem Ci wprost: Jeśli chcesz się nauczyć OOP to zacznij od jakiejś dobrej książki, bo tak po omacku to daleko nie zajdziesz, zajrzyj do działu Książki na tym forum. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 31.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje bardzo za wasze uwagi. Na pewno będą bardzo pomocne. Właśnie zdałem sobie sprawę że przede mną jeszcze dużo nauki
![]() plik: config.php
plik: index.php
Czy tak to może być ![]() ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 709 Pomógł: 176 Dołączył: 24.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
O wiele lepiej, jednak postaraj się aby w metodach nie było echo lepiej żeby zwracały coś za pomocą return lub wyrzucał wyjątek wówczas możesz zrobić tak:
-------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 31.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
A czy jest sens tworzenia specjalnie osobnej klasy do obsługi bazy danych
![]() ![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
do podstawowego użytkownika PDO jest całkowicie wystarczające, szczerze mówiąc nie wiem co mogłaby dodatkowo robić klasa opakowująca, może np. gdybyś w rozbudowanym systemie chciał stworzyć statystyki wykonywanych zapytań, wtedy można by poszerzyć funkcjonalność pdo i wykonać przy każdym zapytaniu dodatkowe operacje. Ale na początku możesz o tym zapomnieć.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 709 Pomógł: 176 Dołączył: 24.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
To zależy jak zaprojektujesz swoją aplikację, dziś większość aplikacji stara się w mniej lub bardziej udany sposób implementować wzorzec MVC, o którym napisano tutaj już chyba książkę
![]() W modelu MVC (naprawdę polecam skorzystać z wyszukiwarki na forum bo jest tego multum) kontroler odbiera żądanie wywołuje model pobiera dane i wrzuca do widoku którego zadaniem jest te dane zaprezentować. Dlatego jeżeli twoja klasa zwróci tablicę artykułów możesz zrobić kilka widoków np widok html gdzie wyświetlisz artykuły w <li></li> ale też widok xml gdzie wyświetlisz te same artykuły w inny sposób. Dzięki temu zyskujesz uniwersalną klasę do obsługi artykułów nie ważne co później chcesz z nimi zrobić ![]() ![]() -------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:25 |