Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nauka właściwego programowania obiektowego
Forum PHP.pl > Forum > PHP
phpNoob
Witam. W PHP programuję od 6 lat, od kilku obiektowo. Napisałem własnego CMS'a, stworzyłem kilka portali, od 2 lat korzystam z frameworka Kohana. Potrafię zaprojektować sobie wszystko, czego potrzebuję, znam pojęcia, ale po wykonaniu 10% jakiejś aplikacji, mam wrażenie, że już panuje chaos.
Nigdzie nie znalazłem informacji jak projektować aplikacje, żeby były przejrzyste, elastyczne i zgodne z konwencją programowania obiektowego. Pokazując mój kod lepszym programistom, dostawałem zwroty, że kod jest chaotyczny, źle skonstruowany, że z obiektowością to on ma niewiele wspólnego, ale nie wiem co z tym zrobić.
Mam też dylematy typu jak zwracać kilka danych z jednej metody. Tablicą? Obiektem? Jeśli obiektem, to jak?
Może znacie jakieś książki lub materiały w internecie, z których mógłbym się tego nauczyć.
Fifi209
Wszystko zależy... Jakbyś tak dał np. cms'a moglibyśmy sobie kod pooglądać i dać Ci jakieś konkretniejsze uwagi.
mike
Cytat(phpNoob @ 23.08.2011, 15:18:57 ) *
Mam też dylematy typu jak zwracać kilka danych z jednej metody. Tablicą? Obiektem? Jeśli obiektem, to jak?
Nigdy w życiu nie pisz takich metod! Za zwracanie kilku informacji z jednej metody powinno się zakuwać w dyby i chłostać na rynku miejskim.

Co do nauki. Polecam Clean Code: A Handbook of Agile Software Craftsmanship
wookieb
http://helion.pl/ksiazki/czysty-kod-podrec...rtin,czykod.htm Tu po polsku.
Ale nie ma czegoś takiego jak "właściwie programowanie obiektowe". Dla każdego "właściwe " znaczy co innego.
Tutaj dałbym Ci link do DOBREJ książki na temat wzorców projektowych ale niestety takiej nie znam sad.gif

phpNoob
Cytat(mike @ 23.08.2011, 15:32:26 ) *
Nigdy w życiu nie pisz takich metod! Za zwracanie kilku informacji z jednej metody powinno się zakuwać w dyby i chłostać na rynku miejskim.

Rozwalił mnie ten post biggrin.gif. W takim razie jak inaczej byś napisał taką metodę?

  1. /*
  2. * Zwykłe zalogowanie
  3. */
  4. public function login()
  5. {
  6. $callback = array(); // tablica z błędami lub komunikatem o powodzeniu
  7. if ( ! Auth::instance()->logged_in()) // nie jestem zalogowany w Auth
  8. {
  9. // walidacja
  10. $rules = Validation::factory($_POST)
  11. ->rule('password', 'not_empty')
  12. ->rule('password', 'min_length', array(':value', 6))
  13. ->rule('password', 'max_length', array(':value', 32))
  14. ->rule('username', 'not_empty')
  15. ->rule('username', 'min_length', array(':value', 3))
  16. ->rule('username', 'max_length', array(':value', 32))
  17. ->rule('username', 'regex', array(':value', '/^[-\pL\pN_.]++$/uD'));
  18.  
  19. if ( ! $rules->check()) // błąd walidacji
  20. {
  21. $callback['errors'] = $rules->errors('validation');
  22. return $callback;
  23. }
  24.  
  25. $user = ORM::factory('user')->where('username', '=', $_POST['username'])->find();
  26.  
  27. if ( ! $user->loaded())
  28. $callback['errors']['username'] = __('this user does not exist');
  29. else
  30. {
  31. if ($user->has('roles', ORM::factory('role', array('name' => 'login'))))
  32. {
  33. // logowanie
  34. $login = Auth::instance()->login(
  35. $_POST['username'],
  36. $_POST['password'],
  37. isset($_POST['remember']) ? (bool) $_POST['remember'] : FALSE
  38. );
  39.  
  40. if ($login)
  41. $callback['success'] = __('you are logged in');
  42. else
  43. $callback['errors']['password'] = __('invalid password');
  44. }
  45. else
  46. $callback['error'] = __('this account has not been activated');
  47. }
  48. return $callback;
  49. }
  50. else
  51. {
  52. $callback['success'] = __('you are logged in');
  53. return $callback;
  54. }
  55. }
lukaskolista
ja bym napisal ja zupelnie inaczej. Z ktorej wersji Kohany krozystasz? W 3.1 i 3.2 zalecanym sposobem na wykonywanie takich akcji jest przechwytywanie wyjatkow, w starszych wersjach jest od tego metoda check(). Metoda login powinna zwracac true/false a jezeli zwroci false to przechwytujesz wyjatki/bledy.

Edit:
juz widze, ze 3.1 lub 3.2. Nie dosc, ze nie przechwytujesz wyjatkow, to jeszcze przy uzyciu ORM robisz osobna walidacje. Jezeli uzywasz ORM cala walidacja powinna przebiegac w modelu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.