Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ocena skryptu.
-arrtxp-
post
Post #1





Goście







Witam, czytając o MVC, stworzyłem własne rozwiązanie i chciałbym abyście oceni mój kod, gdzie mniej więcej przedstawiam system działania:

// struktura najważniejszych plików
  1. /a-control // folder gdzie mamy klasy
  2. + klasy
  3. /mod-view // folder z plikami html
  4. + pliki z html
  5.  
  6. index.php


index.php

  1. <?php
  2. header('Content-type: text/html;charset=utf-8');
  3. date_default_timezone_set('Europe/Warsaw');
  4.  
  5. include('./a-control/aStart.php'); // klasa, która waliduję mi dane (np: aStart::spr_int($dane);) i w niej ustawiam połączenie z bazą.
  6. include('./a-control/aLoadClass.php'); // jak sama nazwa mówi
  7.  
  8. // ustawienia loadera class
  9. $firstLoader = new ClassLoader('i', './a-control/');
  10. $firstLoader->register();
  11.  
  12. // generowanie strony
  13. if(empty($_GET['v'])) { $_GET['v'] = 'start'; }
  14. $u = iPage::loadClass($_GET['v']); // wywołanie odpowiedniej kasy
  15. $u->view();
  16. ?>


iPage.php // ustala to co ma być wyświetlone
  1. <?php
  2. abstract class iPage
  3. {
  4. public static $_page = 'start';
  5. public $fd_www = '/www/'; // folder z strona
  6. public static $db_key = 'baza'; // baza danych - prefix
  7. public $_msg = '';
  8.  
  9. // wyczytywanie odpowiedniej klasy
  10. public static function loadClass($page)
  11. {
  12. self::$_page = aStart::spr_txt($page);
  13. $i_class = array(
  14. 'index' => 'iView_Index',
  15. );
  16.  
  17. if(!empty($i_class[self::$_page]))
  18. {
  19. return new $i_class[self::$_page];
  20. }
  21. else
  22. {
  23. return new iStart;
  24. }
  25. }
  26.  
  27. // generowanie strony
  28. public function view()
  29. {
  30. $file = $this->fd_www.'/mod-view/'.self::$_page.'.php';
  31. if(file_exists($file))
  32. {
  33. include($file);
  34. }
  35. else
  36. {
  37. self::$_page = 'error';
  38. include($this->fd_www.'/mod-view/error.php');
  39. }
  40. }
  41. // koniec
  42. }
  43. ?>


a-control/iView_Index.php
  1. <?php
  2. class iStart extends iPage
  3. {
  4. public function __construct() {
  5. // tutaj sobie sprawdzam co ma być wywołane, np:
  6. if(isset($_GET['zaloguj'])) { $this->zaloguj(); }
  7. }
  8. public function zaloguj()
  9. {
  10. // zapytanie do bazy, czy coś w tym stylu
  11. }
  12. public function dom()
  13. {
  14. return 'Ale Twoja chata to ruina.';
  15. }
  16. }
  17. ?>


mod-view/index.php - widok

  1. <html>
  2. <head>
  3. <title>Dom</tilte>
  4. <//head>
  5. <body>
  6. <?php echo $this->dom(); ?>
  7. </body>
  8. </html>


Teraz chciałbym dowiedzieć się czy takie rozwiązanie jest złe. Jakie stwarza problemy takie rozwiązanie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Zacznijmy od tego, czym jest widok, kontroler i model.
Jeden kontroler nie służy do obsługi całej aplikacji. Powinieneś mieć jakiegoś bootstrapa, klasę która odpowiada za request, routing itp. Najlepiej jakbyś podejrzał jak to jest rozwiązane w innych frameworkach.
Kontroler powinien posiadać jak najmniej kodu, każda akcja powinna odpowiadać za konkretny request. Nie faszeruj kontrolera całym szkieletem aplikacji. Kontroler nie odpowiada za to, jaki kontroler uruchomić, zresztą czytając to na głos, słychać jawnie problem logiczny (IMG:style_emoticons/default/smile.gif)

Analizując Twój kod, to Twoja klasa iPage działa jak bootstrap, obsługa żądania, routing. Wybierasz tam jaki kontroler uruchomić, jaką metodę. Więc zupełnie zbędne jest, aby każdy kontroler po tym dziedziczył.

Podsumowując, koniecznie przyjrzyj się jak rozwiązują te problemy inne FW
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 18:37