![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Hej piszę sobie klasę users, która jest odpowiedzialna za logowanie i dodanie użytkownika, później dojdzie kasowanie i edycja konta. Moje pytanie brzmi czy sposób w który piszę jest dobry:
I dodawanie użytkownika i samo logowanie działa poprawnie, a mi chodzi o Waszą ocenę czy to jest dobrze napisane. Oczywiście zdaję sobie sprawę, że można to napisać zawsze lepiej. Ten post edytował ExPlOiT 2.05.2009, 22:57:27 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 202 Pomógł: 117 Dołączył: 13.04.2007 Skąd: 127.0.0.1 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Nie jest różowo ![]() Dodawanie Usera... Moim zdaniem (podkreślam, że to moje zdanie) powinno to wyglądać tak:
Oczywiście można dorobić jakiś obiekt bazowy, który ma metody typu setData( $post ) - czyli ustawia właściwości obiektu na podstawie danych z tablicy $_POST itd. Jednak nie o to chodzi. Obiekt to nie pojemnik na funkcje. Niech faktycznie będzie to obiekt User. Statyczna metoda login(); powinna ustawiac też flagę w obiekcie czy dane są z bazy czy jest to nowy obiekt User. Wtedy metoda save() wie czy robić insert czy update. Przdałyby się jakieś walidatory jako prywatne metody (w uproszczeniu). Przykład: tworzę nowego Usera, podaję login (ale nie podaję hasła). Robię $user->save(); metoda powinna wyrzucić stosowny wyjątek. Tak bym to widział. Pozdrawiam! -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Dodałem wzorzec projektowy singleton i coś mi nie działa, mama taki kod:
Robię np:
I dostaje błąd:
Co najdziwniejsze dla mnie w klasie user, działa wszystko bez problemu jakiegokolwiek, a w tej klasie do obsługi bazy danych nie działa ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ale dlaczego
Przecież wewnątrz metody masz już obiekt, więc $this. Poza tym nie korzystaj z (anty)wzorca Singleton tutaj - istnieje prawdopodobieństwo, że możesz w przyszłości pokusić się o to by skrypt działał na dwóch bazach danych - co wtedy? Pozatym: 1) Klasa użytkownik jest rozszerzeniem klasy sqli - widzisz logikę w tym? Ja nie. Do klasy User powinienenś w jakiś sposób przekazać już istniejący obiekt klasy Sqli (swoją drogą skąd taka nazwa?) 2) Klasa User jak sama nazwa mówi powinna w pierwszej kolejności reprezentować użytkownika - tutaj internaute. I bez znaczenia jest to czy jest on zalogowany czy nie. 3) Pozatym jak już ayeo wskazał: dane powinny być przekazywane w parametrach funkcji, a nie odczytywane z globalnych danych w jej wnętrzu |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Cytat Poza tym nie korzystaj z (anty)wzorca Singleton[...] Taka była rada ayeo, żeby z niego korzystać. Cytat 3) Pozatym jak już ayeo wskazał: dane powinny być przekazywane w parametrach funkcji, a nie odczytywane z globalnych danych w jej wnętrzu To już zmieniłem. Cytat (swoją drogą skąd taka nazwa?) Tak jakoś, to tylko w celach treningowych. Cytat 1) Klasa użytkownik jest rozszerzeniem klasy sqli - widzisz logikę w tym? Ja nie. Do klasy User powinienenś w jakiś sposób przekazać już istniejący obiekt klasy Sqli W jaki sposób? Gdzieś czytałem coś o parent:: Klasa user ma być odpowiedzialna, za logowanie, dodanie, edytowanie i usunięcie użytkownika. Czyli rozumiem że nie mam korzystać z singletonu w tym wypadku. Ten post edytował ExPlOiT 3.05.2009, 09:20:46 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Taka była rada ayeo, żeby z niego korzystać. IMO była ona tutaj błędna.Cytat W jaki sposób? Gdzieś czytałem coś o parent:: parent:: oznacza odwołanie się do rodzica, ale jak już napisałem klasa User nie powinna dziedziczyć po sqli bo ona nie jest rozwinięciem sqli, ona tylko obiektu takiej klasy używa.
Klasa user ma być odpowiedzialna, za logowanie, dodanie, edytowanie i usunięcie użytkownika. Czyli rozumiem że nie mam korzystać z singletonu w tym wypadku. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Ok dzięki za rady, coś wykombinuje, bo bez wzorca projektowego singleton wszystko ładnie pięknie mi działa.
To powiedz mi jeszcze jak wykorzystać klasę Sqli, w klasie Users nie dziedzicząc jej. Wiem, że zadaje głupie pytania ale dopiero się uczę OOP. Ten post edytował ExPlOiT 3.05.2009, 09:41:24 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Sorki że wracam do tego tematu, ale wyczarowałem pewny kod, a dokładnie wykorzystanie klasy sqli w klasie user i chciałem się dowiedzieć czy dobrze to zrobiłem. Oto kod:
A tak go używam:
Oczywiście kod działa jak należy, tylko chodzi mi o to czy jest to poprawnie napisane. Krótko mówiąc rozumuję iż, w taki sposób jak zrobiłem powyżej, uzyskuje dostęp do klasy sqli oraz jej metod, dobrze myślę czy może się mylę? Wnioskuje to po tym że uzyskałem dostęp do metody update, która jest w klasie sqli. Ten post edytował ExPlOiT 6.06.2009, 00:11:09 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A klasa User ma reprezentować jakiegoś konkretnego użytkownika z bazy danych, czy ma robić za swego rodzaju Managera pozwalającego dodawać, pobierać użytkowników?
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Ma robić za managera, czyli dodawać usera, kasować, pobierać użytkowników, logować itp
Ten post edytował ExPlOiT 6.06.2009, 11:31:53 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
To nie jest najlepsze rozwiazanie a czym nie jest tez bledne lepiej przekazuj obiekt do construct'a jak to robisz w klase User I do tego dla klasy sqli ja bym zrobil wspolne APi(mowa o interfejsach) zebys potem mogl latwo rozszerzac twoja klase user o nowe database'y nie zmieniajac starego kodu tylko tworzysz nowy sterownik ze takimi samymi nazwami funkcji ktore analogicznie beda mialy robic to co robia tez z innej klasy i wtedy tylko przekazujesz odpowiedni obiekt bazy ktorej chcesz uzywac do klasy User. P.S ewentualnie mozesz uzyc inne nazwe funckji jesli ma to byc np baze dla plikow *.txt robiac adapter na stare APi i bedzie good to tylko takie moje zdanie. Ten post edytował marcio 6.06.2009, 15:29:15 -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Co do bazy danych... chyba lepiej będzie skorzystać z PDO. A obiekt ów klasy, przekazać, a nie tworzyć we wnętrzu.
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Co do bazy danych... chyba lepiej będzie skorzystać z PDO. A obiekt ów klasy, przekazać, a nie tworzyć we wnętrzu. O tym samym mowie jednak z tym PDo to nie tak do konca na poczatek sam niech sie pobawi w pisanie sterownikow przynajmniej czlowiek sie czegos nauczy. -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Niech użyje PDO... nauczy się korzystać z całkiem dobrych, gotowych narzędzi.
![]() Ćwiczyć może przecież robiąc to co teraz robi. |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Niech użyje PDO... nauczy się korzystać z całkiem dobrych, gotowych narzędzi. Ta, i nieraz wkurzających (tzn. jak się nie uważa ze składnią i ciężej błędy wyłapać). ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Czyli krótko mówiąc podążam w dobrym kierunku, z tym że mam zamienić MySQLI na PDO
Ten post edytował ExPlOiT 6.06.2009, 21:22:09 |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat z tym że mam zamienić MySQLI na PDO To juz zalezy od ciebie ja bym nie zmienial ![]() Ogolnie nie jest zle ale przy tak malych kodach to jest dosyc latwo napisz system news'ow z obsluga xml/rss/html i wspomagajacy bazy mysql,pliki i np oracle oczywiscie zaimplementuj co chcesz nie musisz wszystkiego ale daj taka mozliwosc bez ingerencji w kod ze strony user'a zmieniajac tylko 1-2 linijki ![]() ![]() ![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Cytat(marcio) To juz zalezy od ciebie ja bym nie zmienial ![]() Na wielu forach, doradzają mi abym korzystał z PDO, zamiast MySQLI Cytat(marcio) Ogolnie nie jest zle ale przy tak malych kodach to jest dosyc latwo Zgadza się, gorzej jak się kod bardziej rozbuduje. A właśnie co do obsługi użytkowników, to robić osobne klasy na dodawanie usera, kasowanie, pobieranie, logowanie, rejestracja etc... i na zarządzanie profilem, czyli aktualizacja profilu itp Czy lepiej zrobić jedną klasę, takiego managera który będzie robił wszystko z użytkownikiem np dodawane, aktualizacja profilu itp Mi się wydaje, że lepszym rozwiązaniem będzie stworzenie jednej klasy do obsługi użytkowników, a w niej wszystko co z użytkownikami związane, ale chciałbym dowiedzieć się, jakie jest wasze zdanie na ten temat. Ten post edytował ExPlOiT 6.06.2009, 22:12:15 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat Na wielu forach, doradzają mi abym korzystał z PDO, zamiast MySQLI Ja nie powiedzialem ze masz zmienic na rzecz mysqli jednak albo uzywasz FW i ich gotowe sterowniki dla baz albo korzystasz z wlasnych nie warto mieszac wedlug mnie. Ogolnie Rejestracja to calkiem inna klasa ewentualnie do rejestracji/logowania mozesz dodac edycje/usuwanie konta etc... jednak lepiej stwotrzyc 3 klasy gdzie kazda ma swoje zadanie czyli: -Register -Auth -User_manager I to wsio Pozdro ![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.06.2025 - 05:16 |