Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ocena klasy routingu
Forum PHP.pl > Forum > PHP > Object-oriented programming
MAKSS966
Witam,


Chciałby prosić o ocenę oraz konstruktywną krytykę mojej klasy Route. Domyślam się że jest w niej dużo rzeczy do poprawny, udoskonalenia. Dopiero zaczynam na "poważnie" swoją przygode z OOP (w całości w php jestem samoukiem). Także prosze o wytknięci błędów.

Plik Route.php
  1. /**
  2.  * @autor: Rafał Kowalski
  3.  * @version: 1.0
  4.  * @date release: 2.09.2013r
  5.  */
  6. class Route{
  7. private $_url;
  8. private $_directory;
  9. private $_controller;
  10. private $_action;
  11. private $_param;
  12. public function __construct( $directory )
  13. {
  14. $this->_url = $_SERVER['REQUEST_URI'];
  15. $this->_directory = $directory;
  16. $this->getParam();
  17. }
  18. private function explodeURL( )
  19. {
  20. return explode('/',$this->_url);
  21. }
  22. private function isAdmin( )
  23. {
  24. if( strpos( $this->_url, 'admin' ) )
  25. {
  26. return true;
  27. }
  28. else
  29. {
  30. return false;
  31. }
  32. }
  33. private function getParam( )
  34. {
  35. $array_MVC = $this->explodeURL();
  36. if ( $this->isAdmin( ) )
  37. {
  38. $this->_controller = $array_MVC[2];
  39. $this->_action = $array_MVC[3];
  40. $this->_param = (int)$array_MVC[4];
  41.  
  42. }
  43. else
  44. {
  45. $this->_controller = $array_MVC[1];
  46. $this->_action = $array_MVC[2];
  47. $this->_param = (int)$array_MVC[3];
  48. }
  49. }
  50. public function isController( )
  51. {
  52. if( empty( $this->_controller ) )
  53. {
  54. if( $this->isAdmin() )
  55. {
  56. $this->_controller = 'Login';
  57. }
  58. else
  59. {
  60. $this->_controller = 'Default';
  61. }
  62. }
  63. else
  64. {
  65. foreach( $this->_directory as $path )
  66. {
  67. if( is_file( $path.ucfirst( $this->_controller ).'_Controller.php' ) )
  68. {
  69. return true;
  70. }
  71. else
  72. {
  73. return false;
  74. }
  75. }
  76. }
  77.  
  78. }
  79. public function defaultMethod( )
  80. {
  81. if( empty( $this->_action ) )
  82. {
  83. $this->_action = 'index()';
  84. }
  85. }
  86. public function isParam( )
  87. {
  88. if( empty( $this->_param ) )
  89. {
  90. return false;
  91. }
  92. else
  93. {
  94. return true;
  95. }
  96. }
  97. public function run( )
  98. {
  99. try
  100. {
  101. if( $this->isController( ) )
  102. {
  103. require_once( $path.ucfirst( $this->_controller ).'_Controller.php' );
  104. $controller = new $this->_controller;
  105. $action = $this->_action;
  106. if( $this->isParam() )
  107. {
  108. $controller->$action();
  109. }
  110. else
  111. {
  112. $controller->$action( $this->_param);
  113. }
  114. }
  115. else
  116. {
  117. throw new RuntimeException("Błędne wywołanie skryptu");
  118. }
  119. }
  120. catch( RuntimeException $e )
  121. {
  122. echo $e->getMessage().'<br />
  123. Plik: '.$e->getFile().'<br />
  124. Numer lini: '.$e->getLine().'<br />
  125. Znak: '.$e->getTraceAsString();
  126. }
  127. }
  128. }

Oraz jego użycie index.php

  1. $directory = array('controller/','controller/admin/','core/');
  2. include 'core/Route.php';
  3. $route = new Route( $directory );
  4. $route->run();
em1X
1) Łamiesz zasadę Single Responsibility Principle
2) Uzależniasz klasę od swojej struktury katalogów (vide admin), poza tym źle używasz funkcji strpos - 0 a false to różnica, poczytaj dokumentację.
3) Poczytaj o PSR-0, PSR-1
4) Czemu łapiesz wyjątki i wyświetlasz błędy? Co jeżeli ktoś chciałby sam błędy obsługiwać?
5) Gdzie testy jednostkowe?

Przeanalizuj i oceń jak takie rzeczy wyglądają w profesjonalnych rozwiązaniach:
http://api.symfony.com/2.0/Symfony/Compone...ing/Router.html
http://framework.zend.com/manual/2.0/en/mo...vc.routing.html
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.