![]() ![]() |
Post
#81
|
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%)
|
zapytania nie wymagające akcji: SELECT
zapytania wymagające akcji: UPDATE, INSERT (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :D:D |
|
|
|
Post
#82
|
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%)
|
@Bela:
Lepiej nie mówmy o zapytaniach, bo w MVC wcale nie musi być bazy danych. A zwłaszcza nie powinno być tego widać w akcjach i w Widoku. W moim artykule był taki ładny schemat działania MVC, ale chyba się nie wyświetla (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Powinno być tak: 1) Zawsze uruchamia się akcja, która robi wszystkie zmiany w Modelu (addUser, deleteUser, modifyUser, blah, blah). 2) Akcja zawsze podaje, jaki widok uruchomić 3) Zawsze uruchamia się widok, który wyciąga z Modelu potrzebne dane i wyświetla je, bez zmieniania niczego Czyli w najprostszym przypadku (tylko wyświetlamy coś) akcja nic nie robi, poza wskazaniem widoku. Inna sprawa, czy chce nam się robić klasy dla takich jednolinijkowych akcji, ale tak wygląda oficjalny MVC. Zawsze jest akcja - widok. Tak więc nie ma żadnego rozróżniania zapytań wymagających i nie wymagających akcji. Zawsze jest akcja, a jak ta akcja nic z siebie nie robi, to już jej sprawa. Tak na marginesie, w phiendzie zrobiłem tak że w zdegenerowanym przypadku bez żadnych modyfikacji można przejść od razu do widoku, bez wywoływania "pustej" akcji. Tylko że to się nazywało "logic action" i "view action". Tak też można, ale ze świadomością, że naginamy wzorzec żeby poprawić wydajność. |
|
|
|
Post
#83
|
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%)
|
Cytat(hawk @ 2004-11-11 10:34:32) Lepiej nie mówmy o zapytaniach, bo w MVC wcale nie musi być bazy danych. A zwłaszcza nie powinno być tego widać w akcjach i w Widoku. W moim artykule był taki ładny schemat działania MVC, ale chyba się nie wyświetla (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . 1. wiem, ze nie musi byc to baza 2. na szczescie jest wersja pdf (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale słaba jakosc obrazkow tam jest 3. dzieki hawk za rozjasnienie wszystkiego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował bela_666 12.11.2004, 00:05:22 |
|
|
|
Post
#84
|
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%)
|
ok to mi jeszcze ukazał się taki oto problem:
wyobraźmy sobie, że robię silnik/cms oparty na mvc. Na stronie opartej o taki skrypt może być jednocześnie potrzebnych kilka widoków np. widok newsow, widok menu, widok stopki i Bóg wie jeszcze czego. A jak wiadomo widok musi być ostatni - więc jak wywoływać te poszczególne widoki? Ja pomyslałem nad kolejką ale co wy o tym sądzicie? |
|
|
|
Post
#85
|
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%)
|
Hmm, są dwie zasady:
1. Widok powinien być jeden. 2. Jeżeli potrzebujesz więcej widoków, patrz punkt 1. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Tak naprawdę jest. Żaden wzorzec nie jest idealny i MVC po prostu nie podejmuje tematu: co zrobić jak chcemy mieć wspólne menu itd. I nie musi. Zauważ że nic ci nie zabrania includować w klasie widoku wspólnego szablonu menu. Oczywiście, wspólny szablon menu wymaga też wspólnego kodu który stworzy to menu i podstawi odpowiednie wartości. Ale ten sam problem miałbyś ze zwykłymi skryptami, które korzystają z szablonów i też muszą jakoś współdzielić kod. MVC ani tutaj pomaga ani przeszkadza. Może trochę jednak ułatwia, bo mamy klasę widoku, więc możemy jakoś sobie dziedziczyć, np. ArticleView extends ViewWithMenu itd. Możesz wpychać to co wypluwa klasa widoku w jakieś headery/footery generowane przez inną klasę. Jest pole do popisu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . BTW nie mówimy "widok stopki", tylko raczej "klasa wyświetlająca stopkę należąca do warstwy widoku". Podobnie jak bez sensu jest mówić "model artykułów". |
|
|
|
Post
#86
|
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 31.07.2003 Ostrzeżenie: (0%)
|
Witam,
Mam taki maly OT. Otoz stworzylem sobie ostatnio cos na wzor MVC. Jest to bardzo prosta aplikacja, wyswietlanie listy userow i wyswietlanie danych jednego usera. Idea jest prosta. Wywoluje kontroler w zaleznosci od tego jaka wartosc przyjmuje zmienna $_GET['show'], kontroler wywoluje widok, widok pobiera dane z modelu i wyswietla strone. Jednak moje rozwiazanie jest malo elastyczne poniewaz kazda akcja ma "swoje pliki". np wylistowanie userow: UsersController UsersModel UsersView wyswietlenie danych jednego usera: UserController UserModel UserView Problem pojawia sie np jak bym dodal jeszcze inne funkcje do tej aplikacji, wtedy bym zginal w gaszczu plikow (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) 1) Myslalem, zeby zrobic jeden kontroler, wtedy kazda akcja, miala by tylko plik modelu i formatowana przez Smarty strone. Ale jak to zrobic? 2) Chcialem jeszcze zrobic "glowny" kontroler. Byl by to trzon aplikacji. Jego zadaniem bylo by wywolywanie "malych kontrolerow", ktore mialy by okreslone zadania np kontroler userow, kontroler newsow. Przyklad: Kod "Glowny" kontroler -> "maly" kontroler modul newsow --> wyswietlanie newsow |-> wyswietlanie konkretnego newsa \-> kasowanie newsa itd itp Niestety znowu moja ograniczona wiedza (albo brak wiary?) nie pozwala mi tego osiagnac. Byl bym bardzo wdzieczny gdyby ktos chcial ze mna podyskutowac na ten temat. Ten post edytował hamlecik 17.12.2004, 11:16:25 |
|
|
|
Post
#87
|
|
|
Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%)
|
Kontroler z natury tego wzorca jest jeden.
Cytat Wywoluje kontroler w zaleznosci od tego jaka wartosc przyjmuje zmienna $_GET['show'] To raczej kontroler powinien się zajmować tym, to on powinien wiedzieć którą akcję uruchomić. W katalogu BluePrints jest ładnie napisane: Sterownik tłumaczy interakcje[użytkownika] z widokiem na akcje, aby zostały wykonane przez model. Te interakcje są zawarte w zmiennych przesyłanych metodą GET. Chcesz zobaczyć newsy, to klikasz na odnośnik do newsów, pod którym kryje się adres w postaci np. index.php?show=news. Zmienna show jest analizowana przez kontroler, który z niej się dowiaduje, że powinien wykonać akcję "news". Akcja pobiera dane z modelu i przesyła je do widoku, który jest dostępny dla końcowego użytkownika. Przynajmniej taki jest mój punkt widzenia. Skoro jesteśmy już przy tym temacie, to na jakiej zasadzie działały twoje kontrolery? Polecam lekturę artykułu hawka o MVC i dokładniejszy opis MVC na stronach BluePrints Suna. |
|
|
|
Post
#88
|
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%)
|
@hamlecik:
Ja to robie w ten sposob: Mam jeden glowny kontroler, ktory pobiera dane od usera i na ich podstawie odpala odpowiednia akcje, ktora jest w konfigu. Przyklad wywolania: www.example.pl/index.php?go=/phppl/news/12 W pliku z konfigiem mam np.: $actionsConfig['phppl'] = array( 'news' => 'NewsAction' ); (oczywiscie to tylko kawalek, bo brakuje fallbackow i defaultowych akcji) phppl - oznacza widok news - to nazwa akcji 12 (i ew dalsze wartosci po slashu) - to parametry akcji I teraz kontroler na podstawie tych danych odpala akcje, ktora znajduje sie w action/phppl/NewsAction.class.php: NewsAction->run( $view, $param ); $view = 'phppl' $param = array(12) Na tej podstawie akcja cos tam sobie mieli i korzysta np z NewsModel, ktory to potem odpowiednio przekazuje do widoku - umnie jest to smarty. I tyle (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
|
Post
#89
|
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 31.07.2003 Ostrzeżenie: (0%)
|
Seth: Wielkie dzieki za rozjasnienie mi sprawy, chociaz to co napisales troche mi koliduje z tym co czytalem. Czy kontroler nie powinienen wywolywac akcji, akcja wywoluje rzadany widok, a widok pobiera z modelu potrzebne mu dane?
Kod INPUT -> kontroler -> akcja -> widok <-> model | | OUTPUT Chyba powoli rozumiem dlaczego nic mi nie wychodzi. Bo kazdy kto pisze o MVC robi to troche inaczej niz jest w oryginalnym wzorcu, a jak sie przeczyta 5 wypowiedzi, w ktorych jest cos innego to sie nie wiem wkoncu co i jak. Ide pisac, jak cos napisze to wtedy tu wroce (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
|
Post
#90
|
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%)
|
Faktycznie troche zmodyfikowalem wzorzec ale inny niz podales.
Kod input ---> [kontroler] <---> [akcja] <---> [model]
| v output <--- [widok] <---> [model] |
|
|
|
Post
#91
|
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%)
|
Pora na moje pytanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dwa różne schematy działania: 1. user chce zobaczyc tresc danego wątku na forum ActionController >> showTopic >> showTopicView 2. user dodaje nowy post, na koniec wyswietla sie taka sama tresc danego wątku z tą jednak roznica ze na gorze jest "belka" z napisem "post dodany pomyslnie" ActionController >> addNewPost >> showTopic >> showTopicView Jeśli już tu są jakieś błędy to mnie poprawcie. Teraz jednak podstawowe pytanie. Jak i gdzie zamieścić ten kod php odpowiedzialny za wyświetlanie belki z "post dodany pomyślnie". |
|
|
|
Post
#92
|
|
|
Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%)
|
U mnie to wyglada tak:
|
|
|
|
Post
#93
|
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 19.04.2004 Ostrzeżenie: (0%)
|
Vengeance, co u Ciebie robi showTopic?
|
|
|
|
Post
#94
|
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%)
|
to jest akcja wyswietlajaca to co widzisz teraz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
tytul wątku i wszystkie posty (odpowiedzi) userów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
Post
#95
|
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 19.04.2004 Ostrzeżenie: (0%)
|
A po co Ci i showTopic, i showTopicView? Przeciez mozna to zrobic tylko za pomoca showTopicView. Z reszta przegladajac ten topic i czytajac art Hawka mozna sie dowiedziec, ze akcje sa czescia MVC odpowiedzialna za updatowanie uduwanie i dodawanie danych do np. bazy danych - dlatego nie wiem co ma akcja do wyswietlenia topicu. Tym powinien zajac sie widok, pobierajac przez model dane i je wyswietlajac.
Jak sie myle to mnie poprawcie. pozdrawiam i zycze swietnej zabawy sylwestrowej do rana (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
Post
#96
|
|
|
Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%)
|
Zaraz, moment, akcja jest częścią kontrolera - i nie ma nic wspólnego z danymi - model jest odpowiedzialny za prace z danymi, widok za wyświetlanie danych w porządanym formacie - natomiast kontroler (więc i akcja) jest odpowiedzialny za aktywowanie modelu, wyciągniecie od niego właściwych danych i przekazanie ich do widoku - który cały ten szajs wyświetli.
|
|
|
|
Post
#97
|
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 19.04.2004 Ostrzeżenie: (0%)
|
bregovic, sciagnij sobie pdf'a z artem hawka 'Wprowadzenie do MVC'. Jest tam bardzo fajny schemat obslugi zadania (rozdzial: 'Obsługa żądania'). Niestety w arcie na wortalu go nie ma.
|
|
|
|
Post
#98
|
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%)
|
Cytat(kurak @ 2004-12-31 20:12:40) bregovic, sciagnij sobie pdf'a z artem hawka 'Wprowadzenie do MVC'. Jest tam bardzo fajny schemat obslugi zadania (rozdzial: 'Obsługa żądania'). Niestety w arcie na wortalu go nie ma. tak i omawiane było to wiele razy, że rysunku nie ma, ale nikt nic z tym nie zrobił (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
|
Post
#99
|
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%)
|
@kurak :
Cytat(hawk) Powinno być tak:
1) Zawsze uruchamia się akcja, która robi wszystkie zmiany w Modelu (addUser, deleteUser, modifyUser, blah, blah). 2) Akcja zawsze podaje, jaki widok uruchomić 3) Zawsze uruchamia się widok, który wyciąga z Modelu potrzebne dane i wyświetla je, bez zmieniania niczego Czyli w najprostszym przypadku (tylko wyświetlamy coś) akcja nic nie robi, poza wskazaniem widoku. Inna sprawa, czy chce nam się robić klasy dla takich jednolinijkowych akcji, ale tak wygląda oficjalny MVC. Zawsze jest akcja - widok. Tak więc nie ma żadnego rozróżniania zapytań wymagających i nie wymagających akcji. Zawsze jest akcja, a jak ta akcja nic z siebie nie robi, to już jej sprawa. |
|
|
|
Post
#100
|
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 19.04.2004 Ostrzeżenie: (0%)
|
Hmmm... no to mamy tu przypadek rozbieznosci zeznan (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Hawk w swoim arcie jasno dal do zrozumienia, ze akcje uruchamiamy tylko w przypadku, kiedy zachodzi potrzeba zmiany stanu danych w modelu. Najlepiej poczekajmy na wypowiedz Hawka (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Cale szczescie, ze poruszany jest ten temat, bo wlasnie pisze kontroler... |
|
|
|
![]() ![]() |
|
Aktualny czas: 4.12.2025 - 11:39 |