Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ocena klasy router
Wazniak96
post 21.06.2013, 20:19:49
Post #1





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Witam,

od pewnego czasu kojarzę, że tak powiem OOP(znam mniej więcej zasady). Ostatnio postanowiłem napisać coś od podstaw, wybór padł na prostego frameworka.
I tutaj pojawia się ten problem, że tworzę go raczej w formie edukacyjnych i potrzebuję opinii kogoś znającego się na rzeczy, czy idę w dobrą stronę smile.gif

Poniżej podaję kod klasy router, mającej zająć się otworzeniem odpowiedniej klasy oraz wywołania podanej metody.

  1. <?php
  2.  
  3. class Router{
  4.  
  5. private $cotroller;
  6. private $method = 'index';
  7. private $directory;
  8.  
  9. public function __construct()
  10. {
  11. $this->directory = APPPATH . '/controllers/';
  12. require(APPPATH.'/config/config.php');
  13. $this->setController($config['base_controller']);
  14. $this->readData();
  15. $this->run();
  16. }
  17.  
  18. public function setController($controller)
  19. {
  20. $this->controller = ucfirst(str_replace(array('/', '.'), '', $controller));
  21. }
  22.  
  23. public function setMethod($method)
  24. {
  25. $this->method = str_replace(array('/', '.'), '', $method);
  26. }
  27.  
  28. public function readData()
  29. {
  30. $uri = explode('/', $_GET['uri']);
  31. if(isset($uri[0]) && !empty($uri[0]))
  32. $this->setController($uri[0]);
  33.  
  34. if(isset($uri[1]) && !empty($uri[1]))
  35. $this->setMethod($uri[1]);
  36.  
  37. for($i=2; $i<12; $i++)
  38. {
  39. if(isset($uri[$i]) && !empty($uri[$i]))
  40. $data[] = $uri[$i];
  41. }
  42.  
  43. return $data;
  44. }
  45.  
  46. private function run()
  47. {
  48. if(!file_exists($this->directory . strtolower($this->controller) . '.php'))
  49. exit('Środowisko aplikacji nie zostało zainstalowane poprawnie.');
  50. else
  51. {
  52. require($this->directory . strtolower($this->controller) . '.php');
  53.  
  54. $method = $this->method;
  55. $class = new $this->controller;
  56. $class->$method();
  57. }
  58. }
  59. }


Wszelka krytyka mile widziana snitch.gif

PS: Brakuje jeszcze sprawdzenia czy podana metoda istniej, a w innym wypadku przekierowanie, ale postanowiłem zrobić to trochę później, kiedy ogólnie zajmę się błędami.

Ten post edytował Wazniak96 21.06.2013, 20:22:41
Go to the top of the page
+Quote Post
Crozin
post 21.06.2013, 20:49:23
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Zadanie routera to zamiana ciągu wejściowego (najczęściej adresu URL) na parametry potrzebne do wywołania odpowiedniej akcji w aplikacji. Samo wywołanie akcji nie należy już do jego zadań. Dodatkowo router może robić jeszcze odwrotną operację, tj. na podstawie parametrów akcji generować URL.
2. Twój kod łamie podstawowe zasady OOP (patrz: trzy pierwsze punkty), zasadę pojedynczej odpowiedzialności, IoC czy ukierunkowania na interfejsy. Nieprzestrzeganie tych standardów właściwie niweluje cały pożytek z obiektówki.
3. Do obsługi błędów służą wyjątki, a od ładowania klas są autoloadery.
Go to the top of the page
+Quote Post
Wazniak96
post 27.06.2013, 12:53:45
Post #3





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Sorki, że tak trochę nie drążyłem tematu ale byłem trochę zalatany, że tak powiem, mniejsza o to.

1. Da się zrobić.
2. Okej, przeczytałem na ten temat i wiem na czym polegają moje błędy, ale teraz jak przenieść to na tą klasę? Jak abstrakcję, polimorfizm oraz dziedziczenie wykorzystać? Z tego punktu wygląda na to, że lepiej byłoby zamienić ją na zbiór funkcji..
3. Poczytam-zrobię. Tak jak pisałem, tworzę tego frameworka dla celów edukacyjnych, ale nie wszystko na raz. smile.gif

Ten post edytował Wazniak96 27.06.2013, 12:57:06
Go to the top of the page
+Quote Post
Crozin
post 27.06.2013, 13:10:25
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Pisanie w celach edukacyjnych jest jak najbardziej OK, ale trzeba mieć na start jakieś obeznanie w temacie. Wygląda na to, że go nie posiadasz dlatego powinieneś raczej skupić się na wykorzystaniu i zrozumieniu działania istniejących rozwiązań - dużo szybciej i solidniej nauczysz się masy rzeczy na tym etapie. W dodatku w nieporównywalnie krótszym czasie. Tutaj zasugerowałbym wykorzystanie Symfony, bo jako jeden z niewielu PHP-owych "fullstack webframeworków" solidnie realizuje drugi punkt z mojej listy.

Ten post edytował Crozin 27.06.2013, 13:11:12
Go to the top of the page
+Quote Post
Wazniak96
post 27.06.2013, 13:19:33
Post #5





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Szczerze mówiąc bawiłem się już trochę w CodeIgniter i całkiem dobrze się pracowało. Za Symfony wolałbym się na razie nie zabierać bo obawiam się, że go nie ogarnę.

W każdym razie dzięki za pomoc i mądrą radę smile.gif
Go to the top of the page
+Quote Post
Crozin
post 27.06.2013, 14:03:13
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


CI to wyjątkowo słaby FW jeżeli chodzi o OOP. SF czy inny "rozbudowany" FW na pewno może sprawić na początku nieco problemów, ale żadne z nich nie są nie do przejścia.
Go to the top of the page
+Quote Post
Wazniak96
post 27.06.2013, 21:27:03
Post #7





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Hmm... Dobrze wiedzieć. Pisząc powyższą klasę wzorowałem się na CI, ale jak widać nie wszylo za dobrze.

Jeszcze takie jedno pytanko. Co byłoby najlepiej spróbować na początek napisać w Symfony? smile.gif
Go to the top of the page
+Quote Post
Crozin
post 27.06.2013, 22:43:11
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Co byłoby najlepiej spróbować na początek napisać w Symfony?
Obojętnie co. Może to być standardowy blog czy inna strona-wizytówka. Chociaż wg mnie najlepiej zrobić sobie klona jakiejś istniejącej "nieszablonowej" strony.
Go to the top of the page
+Quote Post
Wazniak96
post 28.06.2013, 00:24:49
Post #9





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


Okej, jeszcze raz wielkie dzięki za pomoc wink.gif


Ten post edytował Wazniak96 28.06.2013, 00:25:39
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 09:25