Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MVC od strony praktycznej
eMartio
post
Post #1





Grupa: Zablokowani
Postów: 46
Pomógł: 0
Dołączył: 12.01.2006

Ostrzeżenie: (10%)
X----


O MVC na tym forum i w publikacjach elektronicznych oraz tradycyjnych napisano juz wiele. Jednak co publikacja, to nowa implementacji wzorca MVC. Widzialem juz projekt, w ktorym pobranie danych odbywalo sie w kontrolerze, a w modelu jedynie ich przechowywanie.

Mam taki problem. Nigdzie nie moge doczytac czy wzorzec MVC bierze cos takiego pod uwage, jak kilka modeli i widokow? Wiem, ze kontrolerow moze byc kilka. A co z modelami i widokami? I jak to zakodowac obietkowo?

Problem: na podstawie url: index.php?akcja=newsy kontroler wybiera model Newsy, w ktorym pobierane sa wiadomosci z bazy danych. Nastepnie zostaja przeslane do dwoch widokow. Pierwszy to widok 'xml', ktory w ktorym generuje plik kanalu rss, a drugi widok to 'http', ktory uruchamia szablon Smarty z newsami.

Jak to zakodowac obiektowo? Czy tak jak zademonstrowalem to ponizej?

  1. <?php
  2. index.php?akcja=newsy
  3.  
  4. class Kontroler {
  5.   public $akcja;
  6.   public $model;
  7.   public $view;
  8.  
  9.   public constructor($a) {
  10.     $this->akcja = $a;
  11.   }
  12.   public model($typ) {
  13.     // typ = mysql, xml
  14.     $nazwa_klasy = 'Model'.$this->akcja;
  15.     return $dane = new $nazwa_klasy($sekcja);
  16.   }
  17.   public widok($typ) {
  18.     // typ = html, xml
  19.     $nazwa_klasy = 'Model'.$this->akcja;
  20.     return $dane = new $nazwa_klasy($typ, $dane = $this->model);
  21.   }
  22. }
  23.  
  24. $mvc = new Kontroler($_GET['a']);
  25. $mvc->model(mysql);
  26. $mvc->widok(xml);
  27. $mvc->widok(html);
  28. ?>

(IMG:http://forum.php.pl/uwaga.gif)
poprawiam
trzecie upomnienie. za czwartym będzie ostrzeżenie
---
nospor



I od razu nasuwaja sie pytania:
1. Jak zrobic, aby liczba widokow byla generowana dynamicznie (nie zawsze beda 2 widoki, moze byc 1,2,3 lub wiecej widokow)
2. Jak skonstruowac klase akcji?
3. Czy jedna akcja to pobranie modelu i przkazanie go widokowi? A raczej, to widok sobie pobiera model.
4. Co z danymi przeslanymi z formularza? Trafia do modelu i zostaje dopisane do bazy danych lub pliku xml; widok nie jest potrzebny.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Vengeance
post
Post #2





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


eMartio: wrecz odwrotnie - kontroler jest jeden, a widoków i modeli wiele :]

A żeby nie zrobic zbytniego syfu w klasie będącej kontrolerem, rozdziela się jego zadania na podrzędne klasy (zwane akcjami). Tak na prawde to, czy Akcje zaimplementujesz jako jakąś metodę kontrolera (vide cakePHP) czy oddzielną klasę (mojavi?) zależy od Ciebie.

Widok zaś to nie koniecznie tylko xml/html. Widokiem to po prostu to co wcześniej nazwałbyś "plikami szablonów".

Więc odpalasz kontroler, który na podstawie URLa decyduje co zrobić(akcja). Operuje więc na modelu (select,update,insert,delete) i wyświetla wynik (np. smarty).

Chodzi po prostu oto, by nie pchać w jedno miejsce wymieszanych ze sobą instrukcji sql, operacji na danych oraz htmla. Rozdzielenie tego jest podstawą.
Go to the top of the page
+Quote Post

Posty w temacie
- eMartio   MVC od strony praktycznej   28.02.2006, 16:14:21
- - Speedy   Mi osobiście MVC ostatnio nie podchodzi... Wolę so...   28.02.2006, 18:02:28
- - Ociu   Ostatnio trochę zreformowałem swój pogląd na temat...   28.02.2006, 18:46:10
- - Fipaj   [PHP] pobierz, plaintext <?php public construc...   28.02.2006, 18:59:35
- - Vengeance   CytatMi osobiście MVC ostatnio nie podchodzi. A k...   28.02.2006, 22:09:29
- - hwao   Cytat(Vengeance @ 2006-02-28 22:09:29)Kiedy l...   28.02.2006, 22:28:06
- - Vengeance   eMartio: wrecz odwrotnie - kontroler jest jeden, a...   28.02.2006, 23:05:08
- - eMartio   MVC - MODEL-VIEW-CONTROLLER + ACTION Przed chwilk...   28.02.2006, 23:09:49
- - Vengeance   "Okreslenia typu, ze widok to szablon Smarty,...   28.02.2006, 23:38:31
- - eMartio   Cytat(Vengeance @ 2006-02-28 22:38:31)"O...   1.03.2006, 08:48:50
- - NuLL   eMartio - jesli zawsze na sile bedziesz sie trzyma...   1.03.2006, 11:23:09
- - eMartio   Cytat(NuLL @ 2006-03-01 10:23:09)eMartio - je...   1.03.2006, 12:17:46
- - Vengeance   eMartio: nie zgodzę się wcale z tym, co napisałeś ...   1.03.2006, 16:42:59
- - splatch   W niektórych sytuacjach taką klasę stworzyć nieste...   1.03.2006, 17:56:07
- - Speedy   eMartio: Wydaje mi się, że za bardzo kombinujesz z...   1.03.2006, 18:38:11
- - Martio   Czy możecie mi wytłumaczyć jedną rzecz? Jaką rolę ...   1.03.2006, 22:30:54
- - anas   Hej. A ja z tego co pamiętam fajnie to było rozwi...   2.03.2006, 00:34:42
- - splatch   W springu całość wygląda trochę inaczej - oisałem ...   2.03.2006, 01:18:56
- - Vengeance   Na blogu wystawiłem opis (a raczej UML) mojego Pin...   4.03.2006, 00:39:07


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 Aktualny czas: 16.10.2025 - 11:52