Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MVC] Od czego zacząć?, ...progarmowanie/projektowanie...
dragoste
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 30.08.2006
Skąd: Bełchatów

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


Witam

W końcu skusiłem napisać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Niedawno w poszukiwaniu jakiejś teorii pozwalającej oddzielić logikę od widoku itd trafiłem na MVC. Poczytałem, wszystko ok, rozumiem, tylko problem pojawia się przy chęci sprawdzenia teorii w praktyce.
MVC zakłada wyraźny podział na warstwy, które ze sobą współpracują i żadna sama w sobie dużo nie zdziała. Stąd moje pytania.
1.Od czego zacząć pisać, lub też najpierw projektować?

Klasy powinny pozwalać na przeniesienie ich do innych skryptów, w takim razie (2)jak na przykład pobierać dane z bazy danych jeśli do obsługi MySQL mam osobną klasę?

To na razie tyle. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
matix
post
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


Może na początek podkreślę - każdy programista ma inną wizję MVC - to tylko zwykły szablon. To tak jak szablon strony (załózmy z webmark-a, którą dobrze wspominam, niestety - już jej nie ma ;() każdy sobie to lekko przerobi, zmieni, itp. To tak gwoli ścisłości, gdyż to co niżej przedstawię, jednemu się będzie podobało, a drugiemu nie.

Przede wszystkim Kontroller ma zarządzać widokiem i modelem i nic nie wiedzieć o danych. To więc:

  1. <?
  2. class news {
  3.  
  4. public function pokaz()
  5. {
  6. $oView = new Widok; // wybieramy widok
  7.  
  8. // teraz przypisujemy kilka zmiennych, załóżmy tytuł i content strony.
  9. $oView -> title = 'To jest tytul strony';
  10. $oView -> aNews = $oView -> model -> PobierzNewsy();
  11.  
  12. // zwracasz widok
  13. return $oView -> index();
  14. }
  15. }
  16. ?>


Teraz pewnie wiele osób się zapyta, dlaczego to Widok przechowuje w swojej zmiennej instancję klasy Model ? Ano dlatego, żeby w widoku także można było pobierać dane z modelu, gdyż to jest założeniem MVC. Przy okazji jest to wiele wygodniejsze, gdyż jak jest np. lewe menu, które posiada np. blok "losowa fotka", to potem trzeba w każdej metodzie controllera dopisywac te bzdetne linijki kodu, by pobierane były dane z modelu. A po co , skoro można to zrobić jednym zapytaniem w Widoku.

Widok ma za zadanie gromadzić dane z szablonow i je zwracać controllerowi, tak więc (pomijam tutaj klasy abstrakcyjne, zeby pokazac oco chodzi - wiadomo - lepiej dziedziczyc sobie niektore metody z klasy abstrakcjii)

  1. <?php
  2. class Widok {
  3.  
  4. public function index()
  5. {
  6. $sPage = $this->display('header');
  7. $sPage .= $this->display('costam');
  8.  
  9. return $sPage;
  10. }
  11.  
  12.  
  13. public function display($sWhat)
  14. {
  15.  ob_start();
  16. include ($sWhat);
  17. $sContent = ob_get_clean();
  18.  
  19. return $sContent;
  20. }
  21.  
  22. public function __construct()
  23. {
  24. $this -> model = new Model;
  25. }
  26. }
  27. ?>


Model ma pobierać dane z różnych źródeł i je zwracać, czyli po prostu:

  1. <?
  2. Class Model {
  3.  
  4. public function PobierzNewsy () {
  5. $oDb = new Database('plik.ini'); // pobiera konfiguracje z pliku ini , np
  6. $oDb -> execute ('select * from news');
  7. return $oDb -> fetchData();
  8. }
  9. }
  10. ?>


Do tego dochodzi jeszcze FrontController który pobiera sobie z routera kontroller i akcję i odpala odpowiedni kontroller i jego metodę. W moim przypadku (czyt. moj fw) jest coś takiego, że FrontController wybiera kontroller, i później jest coś takiego:

  1. <?
  2. function execute()
  3. {
  4. $sController = $this -> oRouter -> getController();
  5. $sAction = $this -> oRouter -> getAction();
  6.  
  7. $oController = new $sController;
  8. echo $oController -> {$sAction} ();
  9. }
  10. ?>


i już wszystko jasne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Mam nadzieję, że ten post rozwiąże wszelkie wątpliwości co i jak połączyć.

Pozdrawiam,
Matix.
Go to the top of the page
+Quote Post

Posty w temacie
- dragoste   [PHP][MVC] Od czego zacząć?   14.10.2007, 22:18:56
- - Sedziwoj   Po pierwsze skorzystaj z wyszukiwarki (ba na tej s...   15.10.2007, 08:25:13
- - dragoste   Czy wszystkie Twoje 418 postów tak wygląda? Czytaj...   15.10.2007, 14:21:21
|- - NuLL   Cytat(dragoste @ 15.10.2007, 15:21:21...   15.10.2007, 14:45:47
- - em1X   np stworz sobie klasę bazową którą każda klasa będ...   15.10.2007, 14:39:39
- - matix   Może na początek podkreślę - każdy programista ma ...   15.10.2007, 15:05:15
- - dragoste   Dzięki za odpowiedzi Ale jednak jeszcze jedna sp...   15.10.2007, 18:39:23
- - matix   Tak jak pisałem. Jest to kwestia, jak kto woli. C...   15.10.2007, 18:52:14
- - dragoste   Ok, prawie mnie przekonałeś. Tylko jeszcze jedna ...   15.10.2007, 19:53:00
- - matix   Tak, musisz zawsze zmienić w każdej metodzie model...   15.10.2007, 21:08:52
|- - Kiler   Cytat(matix @ 15.10.2007, 22:08:52 ) ...   4.12.2007, 12:10:43
|- - kruk   Cytat(matix @ 15.10.2007, 22:08:52 ) ...   29.09.2009, 13:40:32
- - dragoste   1. Gdzie połączenie z DB? ;> Przegapiłem, czy b...   16.10.2007, 18:47:35
- - matix   Nie, nie Nic nie pominąłem. Metoda dbConnect() j...   16.10.2007, 19:32:42
- - matix   [PHP] pobierz, plaintext <?phpclass db_exceptio...   24.02.2008, 09:35:00
- - iro88   Aby nie tworzyć nowego tematu i nieco odświeżyć......   14.10.2010, 08:07:38
- - cojack   Nie skupiaj się na implementacji, tylko na tworzen...   27.10.2010, 20:24:39
- - Spawnm   Po ostatnim poście stwierdzam że iro88 nie zna pod...   27.10.2010, 20:31:54


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 - 15:18