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
Speedy
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


eMartio: Wydaje mi się, że za bardzo kombinujesz z tymi szablonami.

Mam na myśli to:

Cytat
  1. <?php
  2.  
  3. // [...]
  4.  
  5. public function uruchom() {
  6. if (file_exists('templates/'.$this->sekcja.'/'.$this->akcja.'.mod.tpl')) {
  7. $this->smarty->assign('modul', $this->sekcja.'/'.$this->akcja.'.mod.tpl');
  8. $this->smarty->assign('dane', $this->dane);
  9. $this->smarty->display($this->sekcja.'/index.tpl');
  10. } else {
  11. throw new Exception('Brak wymaganego szablonu.');
  12. }
  13. }
  14.  
  15. // [...]
  16.  
  17. ?>


Nie wiem, z jakiego systemu szablonów korzystasz, ale np. za pomocą Smarty można pominąć te ambarasy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .

Można zrobić np. tak:

  1. <?php
  2.  
  3. if($option == '')
  4. {
  5. $option = 'news';
  6. $category = '1';
  7. $id  = 'page';
  8. $current_page = '0';
  9. }
  10.  
  11. $site = $action->site($option,$category,$id,$current_page); 
  12.  
  13. $core->smarty->assign("array",$site);
  14.  
  15. ?>


Idea jest taka, że na podstawie zmiennych przekazywanych w adresie pobierasz za pomocą metody $action->site() tablicę z odpowiednimi danymi, a w szablonie Smarty są instrukcje wyświetlające odpowiednie dane, gdzie każda tablica siedzi w zmiennej $array i jest generowana w zależności od podanych parametrów, które są np. w adresie strony.
Inkludować pliki *.tpl też możesz w samym szablonie.
Na dobrą sprawę nie wiem, jak masz zorganizowane to wszystko u siebie, ale na pierwszy rzut oka wydaje mi się ten fragment kodu przekombinowany (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
(właściwe to w moim przykładzie zmienna $site pełni funkcję zmiennej $this->dane w Twoim przykładzie).

Zgodzę się, że przypadku jakichś specyficznych danych typu PDF jest sens tworzenia klasy widoku, aczkolwiek, jak już wcześniej przedmówcy wspomnieli, w przypadku danych typu html lub xml, jest to bez sensu.

Cytat
A kto mówi, że sposób który opisałeś to nie MVC? :] Sam twierdzisz, że rozdzielasz kod na akcje (add/del/edit) i wydzilasz także odpowiednie metody pobierania danych (model) jak i metody do ich wyświetlenia (view).


Ale teorytycznie nie jest to czysty MVC (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) , gdyż mam w jednej klasie metody do modyfikacji danych i ich pobierania (czyli model+kontroler i do tego rozproszone), a wydaje mi się, że MVC rozgranicza te dwie sprawy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Po prostu w niektórych sytuacjach, gdzie musiałem wykonywać operacje na różnych danych, ładowanie wszystkich metod pobierających dane w jedno miejsce i wszystkich metod modyfikujących je w inne miejsce, wydało mi się czymś, co może spowodować bałagan. Moje założenia czerpią trochę z MVC, lecz nie kopiują go w pierwotnej formie. Nietrudno można dojść do wniosku, że nie ma sensu sztywno stosować idei modelu widoku i kontrolera. Czasem lepiej trochę ją nagiąć i zmodyfikować w celu usprawnienia działania aplikacji oraz dla zachowania porządku w projekcie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 03:09