Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kontrolery
Forum PHP.pl > Forum > Przedszkole
olechafm
gdzie sprawdzać czy dany wywołany kontroler jest dopuszczalny? jeszcze w routerze zanim przekaże do dispatchera czy dopiero w nim?

chce kontrolować jaki kontroler jest wywoływany i jeśli jest np. z poza dopuszczalnego zbioru to przerzucać na ustalony przeze mnie default_controller, w którym miejscu to robić?
tolomei
Jak poprawnie zadać pytanie.
olechafm
przepraszam czego w moim pytaniu nie rozumiesz, że musiałeś mnie spuścić na drzewo?
#luq
W dispacherze, bo to on zarządza takimi danymi jak kontroler, akacja i parametry.
olechafm
thx

kolejne pytanie z serii zatrważająco trudnych:

widok dla danego kontrolera powinien być inicjowany przez niego samego (w funkcji wewnątrz jego klasy) czy w dispatcherze jeśli to on odpowiada za obsługę uruchamiania kontrolera?
thek
Dispatcher jest tylko do wywołania kontrolera z odpowiednimi parametrami. To kontroler (a właściwie Prezenter) powinien decydowac o tym jaki widok należy wywołać. Właściwie dla pełnego obrazu należało by zadać pytanie... W jakim wzorcu projektowym masz na myśli odpowiedź? wink.gif Jeśli MVP - to Presenter, Jeśli w MVC to może to zainicjować zmianę modelu może teoretycznie zarówno Model, jak i Kontroler.
olechafm
generalnie uczę się śledząc przebieg całego procesu w przypadku MVC, niestety książki z których korzystam oraz to co jest na necie są tragiczne pod względem dokładnego objaśnienia jakie kolejno zdarzenia powinny mieć miejsce (na konkretnym przykładzie, bo oczywiście teorii jest wszędzie multum i każdy autor pisze coś innego). Nie zależy mi generalnie na dokładnym trzymaniu się MVC ale utrzymanie się w jego ramach daje chyba duże możliwości, bo i logika budowania aplikacji staje się jaśniejsza (oddzielenie warstw od siebie). Kwestia zrozumienia tylko jakie interakcje powinny zachodzić w którym momencie... a np. "wspaniała" publikacja Programowanie Obiektowe w PHP5 podaje taki kod w dispatcherze po odebraniu danych z routera:
  1. $app=new controller();
  2. $app->jakieś funkcje();
  3. $app->jakiesfunkcje();
  4. $app->akcja();
  5.  
  6. $view=loader::load("view"); //inicjalizacja widoku poprzez loader wykorzystujący niepoprawnie używany "Singleton"
  7. $viewvars=$view->getVars($app)
  8.  


jednym słowem inicjalizacja widoku odbywa się w dispatcherze... i bądź tu mądry i chciej się człowieku uczyć z książek...
tolomei
Cytat(olechafm @ 11.05.2011, 09:22:31 ) *
przepraszam czego w moim pytaniu nie rozumiesz, że musiałeś mnie spuścić na drzewo?


Przepraszam za spuszczenie Cię na drzewo.
Wynikło to jedynie z mojej niewiedzy.
thek
Dispatcher zajmować się powinien jedynie przetwarzaniem żądania tak, by przyporządkować do niego odpowiedni kontroler i parametry. Jeśli miałbyś się trzymać w aplikacji webowej się MVC to... nie uda Ci się. To co w frameworkach jest używane i nazywa się jako MVC jest tak naprawdę MVP. A ten wzorzec opiera się na zasadzie: prezenter wybiera model oraz widok i je komunikuje między sobą. Tak więc odwołania do modelu i wywołania widoków oraz ich metod odbywają się wewnątrz prezentera.
olechafm
A do jakiego stopnia kontroler(prezenter) powinien być pośrednikiem w komunikacji między widokiem i modelem? Powinien sam pobrać z modelu interesujące dane, zapisać je w sobie i przekazać dopiero te dane do widoku w czystej postaci(zmiennych, tablic etc.), czy powinien do widoku przekazać obiekt modelu i pozwolić by odpowiednimi funkcjami widok sobie te dane wypruł z modelu?
Noidea
Cytat
A do jakiego stopnia kontroler(prezenter) powinien być pośrednikiem w komunikacji między widokiem i modelem? Powinien sam pobrać z modelu interesujące dane, zapisać je w sobie i przekazać dopiero te dane do widoku w czystej postaci(zmiennych, tablic etc.), czy powinien do widoku przekazać obiekt modelu i pozwolić by odpowiednimi funkcjami widok sobie te dane wypruł z modelu?


Jeśli masz na myśli MVC, to to drugie.
olechafm
MVC aka MVP...
Noidea
MVC i MVP to dwa wzorce, które różnią się między innymi sposobem komunikacji między widokiem a modelem. Więc jak ci mam odpowiedzieć na to pytanie?

http://www.google.pl/search?q=MVC+vs+MVP - w pierwszym linku masz diagram
olechafm
ciężko mi się zorientować, szczególnie, że dopiero odkrywam obydwa wzorce, niby chodzi mi o MVC ale:

Cytat(thek @ 13.05.2011, 21:12:10 ) *
Jeśli miałbyś się trzymać w aplikacji webowej się MVC to... nie uda Ci się. To co w frameworkach jest używane i nazywa się jako MVC jest tak naprawdę MVP.



ale z tego co rozumiem to

- w MVP widok i model nie mają ze sobą styczności, wszystko przechodzi przez prezenter(kontroler), który pobiera żądane przez widok dane z modelu i mu je zwraca

- w MVC kontroler inicjuje model i widok, przekazuje widokowi instancję modelu, który pobiera dane za jego pośrednictwem

przy czym w obu przypadkach model nie inicjuje żadnych akcji czy interakcji z własnej woli


Spawnm
Jest osobny temat jeśli chodzi o wzorce architektoniczne, tam na ten temat prowadźcie dyskusję .
Od siebie dodam że popularne frameworki nie używają MVP,
w MVP view nie ma dostępu do modeli, a w frameworkach to podstawa ;]
olechafm
zapewne na pytanie które rozwiązanie lepsze w przypadku tej komunikacji, otrzymam tyle samo różnych opinii co odpowiedzi i muszę się sam przekonać co mi lepiej pasuje... mam rację?
thek
Dokładnie smile.gif Już sama próba dyskusji czym jest, a czym nie jest MVC, to flamewar wink.gif Zresztą zajrzyj do tematu o wzorcach, przeczytaj całość, a sam się przekonasz. Pewnie po jego lekturze będziesz nie mniej skołowany niż przed. Z tą różnicą, że będziesz wiedział ciut więcej i na podstawie tego co przeczytałeś, będziesz mógł własne zdanie sobie wyrobić. I szczerze mówiąc tak powinno być. Programowanie polega na myśleniu samodzielnym i wyciąganiu wniosków z wiedzy ogólnej czy "społecznościowej". Bez tego zostać można jedynie klepaczem kodu. Szybkim może, ale tylko klepaczem.
olechafm
póki co przepisałem kod na tę wersję zgodną z MVC i na razie tak będę go wykorzystywał, za dużo rzeczy na raz do nauki jest na początku, żeby wszystko od razu robić dobrze...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.