![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 28.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Napisałem takie "coś" i mam nadzieję że jest to klasopodobne. Proszę o opinie, dobrze myślę czy też nie. Osobiście mam wrażenie że zamknełem kod strukturalny w klasie i nic więcej. Aczkolwiek szukając w internecie ciężko jest trafić na coś zrozumiałego. W większości spotkykam się z informacją co to jest klasa i jak ją stworzyć, dziedziczenie czy parę słów o hermetyzacji.. ;(
Proszę Was również o możliwe przykłady klas, nie zbyt skomplikowanych lecz ukazujących myślenie obiektowe, jeżeli takowa znacie ![]()
Pozdrawiam, Luke ![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
To jest bardziej userManager, czyli menadżer użytkowników, niż klasa użytkownika (pojedynczego) sama w sobie.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Konstruktor nie "zgłasza błąd" a rzuca nic nie znaczący wyjątek, nawet nie wiadomo z jakiej klasy pochodzi ani co jest przyczyną jego wystąpienia. W dodatku tutaj nie powinien być rzucany wyjątek.
Wszędzie gdzie masz zapytania SQL używasz "DatabaseManager" - co też ma złą nazwę, bo nijak nie służy do zarządzania bazami jak na moje oko, ale chciałem poruszyć inny temat, mianowicie filtrowania, powinno to się odbywać w w/w klasie a nie w "User".
Powinno zwracać true/false, nic więcej użytkownika nie interesuje, jeżeli chcesz wyciągnąć ID zalogowanego to napisz metodę do tego. SetNewUser -> CreateUser, Register etc. Też powinna zwracać true/false i zapisać gdzieś błędy, które mógłbyś odczytać poprzez kolejną metodę. Resztę napisał kolega przede mną ![]() -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 4 Dołączył: 9.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
A czy nie lepiej rozplanować to trochę inaczej ? żeby rozdzielić sprawdzanie poprawności danych od umieszczania ich do bazy danych ? Ten post edytował brzoza91 25.05.2012, 20:43:33 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 15.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
A czy nie lepiej rozplanować to trochę inaczej ? żeby rozdzielić sprawdzanie poprawności danych od umieszczania ich do bazy danych ? Stwórz menadżera który to będzie tworzyć model danych np. Model może wyglądać tak jak poniżej, może być obsłużony np. za pomocą magicznych metod __set() oraz __get(). Zadaniem poniższego modelu jest przechowywanie danych i nic więcej
następnie stwóż menadżera modelu, który to będzie pobierać dane i umieszczać je w modelu i np. zwracać gdy kontroler o nie poprosi np.
Co zrobić gdy np. mamy do pobrania 50 użytkowników(obiektów)? stwórz ich kolekcje o nazwie np. USER_MODEL_COLLECTION. tak ja to widzę. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 664 Pomógł: 169 Dołączył: 8.01.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Osobiście mam wrażenie że zamknełem kod strukturalny w klasie i nic więcej Przynajmniej wiesz, że coś tu jest nie tak, a to już połowa sukcesu:) Wiele osób uważa, że jak użyją magicznego słowa klas, to oznacza, że programują obiektowo. Dobry (a przynajmniej mam taką nadzieję) kurs OOP jest tutaj. A co do Twojego przykładu to: 1) __construct() - pobiera dane nt. użytkownika i korzysta z sesji Model to model. Użytkownik posiada dane na swój temat: id, name, email (na marginesie nie potrzebujesz prefixu user w atrybutach skoro klasa to User:P) i służy do obsługi logiki dotyczącej użytkownika, czyli metody takie jak: isAdmin(), isBlocked(), getEmailAdderess() są jak najbardziej na miejscu. UserLogin() i UserLogout() już nie. Metody modelu powinny dostarczać/ustawiać informacje na jego temat, wykonywać operacje na nim. Metody Logout() i Login() nie wykonują operacji na użytkowniku, a na aplikacji. 2) GetUserData() - to dego powinieneś stworzyć klasę np UsersManager z metodą getUser($id) i ona powinna Ci zwrócić gotowego użytkownika. Nie powinieneś mieszać logiki (użytkownik) ze sposobem przetrzymywania danych. Teraz jest to baza danych, ale pewnego dnia może dojdziesz do wniosku, że lepsze będą pliki XML? 3) UserLogin() i UserLogout() - o tym było przy okazji konstruktora:) 4) SetNewUser($user, $email, $pass, $pass2) Po pierwsze walidacja powinna być wcześniej, chociaż to zależy od podejścia, które stosujesz:) Jednak na tym etapie radzę jednak stosować walidację przed tworzeniem instancji modeli. To konstruktor powinien dostać parametry $user (a raczej $name?), $email i $pass. Ewentualnie, jeżeli chciałbyś użytkownika zapisać w bazie, to powinieneś w tym celu skorzystać z klasy UsersManager i metody save(User $user) 5) IsUserOnline() Czyli, czy jest zalogowany. Od tego typu rzeczy powinieneś mieć mechanizm kontroli dostępu. I powinno to być sprawdzone wcześniej. Jeżeli dostęp do określonego miejsca może mieć tylko użytkownik zalogowany, to każdy inny powinien dostać odpowiedni komunikat. Z tym, że za to nie odpowiada użytkownik tylko aplikacja. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.07.2025 - 08:59 |