Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MVC od strony praktycznej
eMartio
post 28.02.2006, 16:14:21
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. ?>


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
Speedy
post 28.02.2006, 18:02:28
Post #2





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

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


Mi osobiście MVC ostatnio nie podchodzi... Wolę sobie tworzyć klasy odpowiedzialne za wykonywanie wszystkich operacji w danym obszarze (np. newsy-> add/del/edit/show_all/show_one), a później klasę akcji odpowiedzialną za wykonywanie operacji. W tej klasie osobne metody dla pobierania danych i osobne dla ich modyfikacji . Później przekazuję zmienne odpowiedniej metodzie w klasie akcji, która np. wypluwa jakąś tablicę do szablonu.

Posłużę się własnym przykładem:

ad.3. ja za pomocą metody z klasy akcji pobieram model, a wyświetlaniem obarczam szablon i plik, który go generuje

ad.4. widok możesz wykorzystać do wyświetlania komunikatów na podstawie przekazywanych zmiennych.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
Ociu
post 28.02.2006, 18:46:10
Post #3





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Ostatnio trochę zreformowałem swój pogląd na temat modelu.

Więc
Model to wszystkie operacje, które są wykonywane, przez dany moduł (np. pobieranie newsa).

Akcja jest pośrednikiem między Modelem a Widokiem.
  1. <?php
  2. class NewsShowModel extends Model {
  3. public function perform( Services $service) {
  4. $w = $this->db->query("SELECT * FROM news WHERE id = '". $service->getRequest()->getGetParam('news_id') ."'");
  5.  
  6. $service->getRequest()->registerParameter('newsContainer', $w->next());
  7. }
  8. }
  9.  
  10. class NewsShowAction extends Action {
  11. public function perform(Services $service) {
  12. $news = $service->getRequest()->getParameter('NewsContainer');
  13. $this->tpl->assign('id', $news->id);
  14. $this->tpl->assign('content', $news->content);
  15. }
  16.  
  17. public function isValid() {
  18. if($this->TplExists('NewsShowTemplate')) {
  19. return true;
  20. }
  21. }
  22. }
  23. ?>


1. Stwórz katalog Models i funkcje, która tworzy mapę wszystkich plików w tym katalogu
4. Model wszystko uruchamia. Akcje tylko pośredniczą np. w wysłaniu odpowiedniego komunikatu
Go to the top of the page
+Quote Post
Fipaj
post 28.02.2006, 18:59:35
Post #4





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


  1. <?php
  2. public constructor($a) {
  3. ?>

ke? biggrin.gif
a nie __construct ($a)questionmark.gif

jeśli chodzi o MVC - koniecznie zapoznaj się z CakePHP. To doskonały i naprawdę bardzo prosty framework MVC.

dwa artykuliki o podstawach Cake znajdziesz tutaj: http://fipaj.livenet.pl/articles/pmwiki.ph...akePHP.HomePage (taka autopromocja biggrin.gif)

nawet jeśli nie zdecydujesz się na Cake'a - ten framework i tak uzupełni twoją wiedzę o MVC...


--------------------
Go to the top of the page
+Quote Post
Vengeance
post 28.02.2006, 22:09:29
Post #5





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

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


Cytat
Mi osobiście MVC ostatnio nie podchodzi.


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).

Nikt nie mówi, że MVC wymusza na Tobie tworzenia oddzielnych klas dla tych rzeczy. Ba... moższ to nawet na funkcjach zrobić tongue.gif Kiedy ludzie pojmą, że zasada MVC brzmi "Istnieją trzy wartstwy: logiczna, biznesowa i widoku" A jak ty to zaimplementujesz to twoja bajka ;P


--------------------
Go to the top of the page
+Quote Post
hwao
post 28.02.2006, 22:28:06
Post #6


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Cytat(Vengeance @ 2006-02-28 22:09:29)
Kiedy ludzie pojmą, że zasada MVC brzmi "Istnieją trzy wartstwy: logiczna, biznesowa i widoku" A jak ty to zaimplementujesz to twoja bajka ;P

wiesz, juz wymyslili w tym temacie na tyle duzo ze nie trzeba nic samemu wymyslac, co do samego wprowadzenia mvc jest pare wdrozen.

@autor swoja droga ta co przedstawiles to najbardziej dziwna implementacja jaka widzialem smile.gif
Go to the top of the page
+Quote Post
Vengeance
post 28.02.2006, 23:05:08
Post #7





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
eMartio
post 28.02.2006, 23:09:49
Post #8





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

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


MVC - MODEL-VIEW-CONTROLLER + ACTION

Przed chwilka stworzylem cos takiego:

INDEX.php:
  1. <?php
  2. // wywloanie pliku: index.php?akcja=news
  3.  
  4. // mapowanie url-a i wybór własciwej akcji
  5. $fc = new FrontController($_GET['akcja']);
  6. // uruchomienie wlasciwej akcji
  7. $akcja = new $fc->akcja();
  8. // przekazanie danych wejsciowych do wlasciwej akcji
  9. $akcja->dane_wejsciowe = $fc->dane_wejsciowe;
  10. // wykonanie akcji
  11. $akcja->action();
  12. ?>


INCLUDES:
  1. <?php
  2.  
  3. class FrontController {
  4. private $akcja;
  5. private $dane_wejsciowe;
  6.  
  7. public __constructor($akcja) {
  8. $this->akcja = $akcja;
  9. $this->dane_wejsciowe = array_merge($_GET, $_POST, $_SESSION);
  10. }
  11. }
  12.  
  13. interface ActionController {
  14. public function action();
  15. public function model();
  16. public function view();
  17. }
  18.  
  19. class test implements ActionController {
  20. private $dane_wejsciowe;
  21. private $dane_modelu;
  22.  
  23. public function action() {
  24. // pobranie danych z bazy danych
  25. $this->dane_modelu = $this->model('PobierzDaneZBazyDanych', array(...);
  26. // zapisanie danych do pliku xml, ktory tworzy kanal RSS
  27. $run = $this->view('XML', $this->dane_modelu);
  28. // wyswietlnie danych na stronie WWW w postaci HTML-a
  29. $run = $this->view('HTML', $this->dane_modelu);
  30. }
  31. public function model($klasa, $parametr) {
  32. return new $klasa($parametr);
  33. }
  34. public function view($klasa, $parametr) {
  35. return new $klasa($parametr);
  36. }
  37. }
  38.  
  39. ?>


Oczywiscie, nalezy dodac w kontrolerze walidacje danych wejsciowych. Jest to mocno wstepny zarys mojej wersji implementacji wzorca MVC w aplikacji napisanej w php 5.

Prosze o uwagi, sugestie, komentarze. Jak to oceniacie, co zmienic, dodac... ?


Tak na marginesie: w ostatnim czasie czytalem wiele publikacji na temat implementacji MVC w php i smiesza mnie teorie wiekszosci "programistow". Okreslenia typu, ze widok to szablon Smarty, a nie klasa ja implementujaca (forum WebHelp) czy np. pobieranie danych z bazy zrealizowane w kontrolerze, a nie w modelu (php Solutions z 2005 r.). Bardzo podobal mi sie artykul "Wprowadzenie do MVC" autorstwa hawk oraz publikacja "The Model View Controller Pattern".

Przegladalem kilka frameworkow MVC. Niestety, wiekszosc implementujac w nim wzorzec MVC odbiegala od jego zalozen. To tyle odnosnie moich przemyslen na ten temat...

Ten post edytował eMartio 1.03.2006, 08:50:21
Go to the top of the page
+Quote Post
Vengeance
post 28.02.2006, 23:38:31
Post #9





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

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


"Okreslenia typu, ze widok to szablon Smarty, a nie klasa ja implementujaca"

Się nie zgodze. U mnie "widok" to pliki z katalogu /theme (zwykłe pliki html przeplatane prostym php <?php echo $title;?>) i klasa Template z metodami: assign, fetch, display;

Teraz w akcji tworze obiekt Template, assignuje zmienne i robie display() na odpowiednim pliku z /theme.

I po co mi tu oddzielna klasa?


--------------------
Go to the top of the page
+Quote Post
eMartio
post 1.03.2006, 08:48:50
Post #10





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

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


Cytat(Vengeance @ 2006-02-28 22:38:31)
"Okreslenia typu, ze widok to szablon Smarty, a nie klasa ja implementujaca"

Się nie zgodze.

Chodzi mi o to, że u kolesia widok to jedynie szablon Smarty czyli jakis_tam_plik.tpl. Natomiast widok to rowniez klasa, ktora inicjuje sytem szablonow smarty.

Np.

  1. <?php
  2. /**
  3. * WIDOK WZORCA MVC - HTML
  4. *
  5. */
  6.  
  7. class Html {
  8. private $smarty;  // obiekt systemu szablonow Smarty
  9. public $sekcja; // wybranie wlasciwej aplikacji webowej
  10. public $akcja;  // wybranie wlasciwego modulu aplikacji
  11. public $dane; // pobranie danych z modelu do widoku
  12.  
  13. public function __construct() {
  14. require_once('libraries/smarty/Smarty.class.php');
  15.  
  16. $this->smarty = new Smarty();
  17. if (file_exists('templates/'.$this->sekcja)) {
  18. $this->smarty->template_dir = 'templates/'.$this->sekcja;
  19. } else {
  20. throw new Exception('Brak wymaganego szablonu.');
  21. }
  22. $this->smarty->compile_dir = 'temporary/templates';
  23. $this->smarty->cache_dir = 'temporary/cache';
  24. }
  25.  
  26. public function uruchom() {
  27. if (file_exists('templates/'.$this->sekcja.'/'.$this->akcja.'.mod.tpl')) {
  28. $this->smarty->assign('modul', $this->sekcja.'/'.$this->akcja.'.mod.tpl');
  29. $this->smarty->assign('dane', $this->dane);
  30. $this->smarty->display($this->sekcja.'/index.tpl');
  31. } else {
  32. throw new Exception('Brak wymaganego szablonu.');
  33. }
  34. }
  35. }
  36. ?>


Jest to klasa widoku odpowiedzialna za prezentacje danych w HTML. Mozna, a nawet nalezy stworzyc rowniez klase odpowiedzialna za prezentacje danych w xml-u, pdf-ie czy e-mailu.

Wiele osob tworzacych aplikacje na podstawie wzorca MVC wysyla maile prosto z modelu, co kloci sie z zalozeniami wzorca MVC! Przeciez zadne dane z modelu nie powinny wychodzic z aplikacji na zewnatrz nie przechodzac przez widok! Model nie wie w jakim widoku jego dane zostana uzyte. To go nie interesuje...

Ten post edytował eMartio 1.03.2006, 08:49:47
Go to the top of the page
+Quote Post
NuLL
post 1.03.2006, 11:23:09
Post #11





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


eMartio - jesli zawsze na sile bedziesz sie trzymal zasad MVC to twoj kod sie zrobi absurdalny. Gdzies jest granica pomiedzy wykorzystaniem a uzytecznoscia wzorca.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
eMartio
post 1.03.2006, 12:17:46
Post #12





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

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


Cytat(NuLL @ 2006-03-01 10:23:09)
eMartio - jesli zawsze na sile bedziesz sie trzymal zasad MVC to twoj kod sie zrobi absurdalny. Gdzies jest granica pomiedzy wykorzystaniem a uzytecznoscia wzorca.

NULL, racja... A czy moge prosic o poprawienie powyzszego kodu, tak aby stosowac wzorzec MVC od strony praktycznej, a nie teoretycznej?
Go to the top of the page
+Quote Post
Vengeance
post 1.03.2006, 16:42:59
Post #13





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

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


eMartio: nie zgodzę się wcale z tym, co napisałeś dwa posty powyżej. Jeżeli możesz... przedstaw jak masz zamiar używać tego swojego "widoku" w perspektywnie całości aplikacji? Bo ja i tak nie widze sensu tworzenia jakiej kolwiek klasy dla widoku! (no może poza 30 linijkową obsługującą pliki szablonów).


--------------------
Go to the top of the page
+Quote Post
splatch
post 1.03.2006, 17:56:07
Post #14





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


W niektórych sytuacjach taką klasę stworzyć niestety trzeba by nie wpinac PDFów w akcji. Kiedy output to html/text/rss można ten krok oczywiście pominąć, nie mniej jeśli w gre wchodzą bardziej fantazyjny output klasa pośrednicząca jest dobrym rozwiązaniem.
Przykład, który został podany wcześniej nie jest do końca trafny - to w dalszym ciągu jest HTML więc nie ma po co tworzyć klasy pośredniczącej (tym bardziej sztywno zawierającej smarty).
Myślę, że dobrym przykładem może być Mojavi - gdzie są różne metody obsługi widoku od PHPView oraz PHPTalView przez SmartyView po XSLTView. Klasa widoku dziedziczy z określonego typu widoku (powiedzmy PHPView) i przekazuje atrybuty do szablonu.
W chwilach gdy żadna akcja nie jest wykonywana, bo przecież przy pokazywaniu listy produktów nie ma żadnych modyfikacji danych takie rozwiązanie zastępuje nam pisanie niepotrzebnego kodu w akcji.

Ten post edytował splatch 1.03.2006, 18:00:37


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
Speedy
post 1.03.2006, 18:38:11
Post #15





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 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 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 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 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 winksmiley.jpg.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
Martio
post 1.03.2006, 22:30:54
Post #16





Grupa: Zablokowani
Postów: 167
Pomógł: 2
Dołączył: 15.02.2004

Ostrzeżenie: (30%)
XX---


Czy możecie mi wytłumaczyć jedną rzecz? Jaką rolę odgrywa akcja w aplikacji tworzonej na wzorcu MVC?

Powiedzmy, mamy do zrealizowania takie zadania:
a. sprawdzenie czy user jest zalogowany
b. aktualizacja danych
c. pobranie innych danych

To czy akcja to każdy z tych 3 zadań czy jednak akcja to będzie tylko aktualizacja danych czyli punkt 'b'?

I druga rzecz, jak powyższa rzecz jest realizowana?

Sterownik sprawdza czy user jest zalogowany. Jeżeli tak, to przekazuje sterowanie do kontrolera akcji, który wywołuje pierwszy model aktualizując dane, a następnie wybiera widok, który wywołuje drugi model i pobiera z niego dane do prezentacji na stronie. Czy to tak działa?

Proszę o praktyczne opisanie powyższego przykłądu, bo trochę się już w tym pogubiłem...

Ten post edytował Martio 1.03.2006, 22:31:18
Go to the top of the page
+Quote Post
anas
post 2.03.2006, 00:34:42
Post #17





Grupa: Zarejestrowani
Postów: 172
Pomógł: 0
Dołączył: 22.09.2002
Skąd: Gorzów Wlkp

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


Hej.

A ja z tego co pamiętam fajnie to było rozwiązane w PHIEND'zie i własnie na tym bazuje we wlasnych rozwiazaniach. Akcje zostaly podzielone na dwa rodzaje - widokowe i logiczne. Logiczne wykonuje pewne operacje(np. aktualizacja danych usera - korzystajac z modelu do zarzadzania userami), nastepnie przekazuja informacje do kontrolera o tym czy sie to powiodlo, a kontroler wie co ma dalej uruchomic w calym lancuchu przetwarzanych akcji(zdarzen). Jezeli all bylo ok, wywoluje akcje(widokowa) ktora konczy caly proces zmiany danych i np. przekazuje do szablonu gratulacje i nowe dane po aktualizacji.

to chyba tyle

pozdrawiam

anas
Go to the top of the page
+Quote Post
splatch
post 2.03.2006, 01:18:56
Post #18





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


W springu całość wygląda trochę inaczej - oisałem to na tyle, na le potrafiłem na moim blogu.
Dla niektórych rodzajów widoków nie trzeba tworzyć klas pośredniczących, nie doszedłem jeszcze jak przełączyć view resolvera, ale na 90% jest to możliwe. smile.gif


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
Vengeance
post 4.03.2006, 00:39:07
Post #19





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

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


Na blogu wystawiłem opis (a raczej UML) mojego Pinky Framework. Może to być dobry (bądź zły;P) przykład do tego tematu.
Proszę też o wszelkie uwagi (lepiej w komentarzach niż tutaj).


--------------------
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 23.04.2024 - 14:40