![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 1 Dołączył: 15.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pytanie czysto teoretyczne. Buduje strone i chce ja oprzec na wzorcu MVC. Wspieram sie Smarty i Pear przy tym. I teraz moje pytania. 1. Czy za widok maja byc odpowiedzialne tylko szblony smarty czy tworzyc do niego osobna klase? 2. Poza przypisaniem danych ktore uzyskuje z modelu, podstrony roznia sie tez wygladem(dokladnie tlami glownej tresci), jaka czesc MVC powinna byc odpowiedzialna za ustwienie przykladowego tla? Rozwazam dwa przypadki, nie wiem jednak ktory bylby "najczystrzy" jesli chodzi o zalozenia ww wzorca. Pierwszy to to ze poszczegolne metody kontrolera przypisauja do szablonu smarty, dane z modelu oraz w kazdje metodzie jest deklarowana zmienna odpowiadajaca za tlo strony i tak tez przypisywana do szablonow. Drugie rozwiazanie to takie, ze w akcjach kontrolera wogole nie zajmu je sie ustawianiem tla a tylko wyborem widokow. W takim przypadku jednak ilosc szablonow musialbym odpowiednio rozmnozyc. Czytam dosc spro na temat mvc, moje doswiadczenie z frameworkiem cakePHP wcale nie rozwialo wszelkich watpliwosci jednak, przynajmniej tych teoretycznych. Rozumiem ze wzorzec jest raczej czyms abstrakcyjnym i elastycznym niemniej na forum znalazlem taka definicje widoku: Cytat Główna zasasda MVC jest to aby w modelu byl tylko kod php a w VIEW tylko html Natomiast w jednym z rtykulow na wortalu opis brzmi juz tak: Cytat Widok powinien wykorzystywać model do pobrania danych, które będą wyświetlone. Typowo, widok powinien utworzyć instancje klas modelu i wywołać metody odpowiedzialne za pobranie odpowiednich danych. Tym, czego należy się wystrzegać w widoku, jest modyfikacja danych. Widok nie powinien zmieniać w żaden sposób stanu aplikacji. Powinien np. wyświetlać listę użytkowników, ale nie powinien ich dodawać ani usuwać. Rozbieznosc jest wiec dosc spora... Jak najlepiej wedug Was zarac sie za to, w przypadku niewielkiej aplikacji? Z gory dzieki i pozdrawiam! |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Cytat Opisów i implementacji MVC jest tyle ilu programistów... Ja robie to tak (chodzi mi o ten wasz przeklęty widok). Kontroler wywołuje akcje Index (obojetne) class Action_Index extends Application_Action { function default() { $this->getModel('Index', 'getNews'); $this->getView('Index', 'showNews'); } } w modelu pobieram dane i zapisuje do kontrollera zmienna np. $this->aNews; (metoda __set i __get) Według mnie kontroller wywołuje tylko akcje, akcja model i viewa i może dodawać do bazy danych. Dzięki temu, że akcja dodaje do bazy danych nie mam balaganu. Jak chce zmienić co¶ w dodawaniu, np rejestracji chce dodać nowe pole to szukam w akcji, a nie w modelu gdzie jest jeszcze profil użyszkodnika, logowanie i inne rzeczy. Co do validacji, zrobiłbym to jako filtr podczas uruchamiania Akcji/Modelu i oparłbym konfigurację na plikach xml (jak menic). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@bim2
Coś chyba masz pokopane... albo źle rozumiem. Model ma i tylko on wiedzieć skąd i umieć pobrać dane. Widok powinien umieć prezentować mu podane dane. Kontroler (u Ciebie akcja) wie z których (liczba mnoga) modeli pobierać dane i do którego widoku je przekazać. Widok powinien dostawać dane a nie je pobierać, bo już z doświadczenia wiem, że jak się zmieni co jest widokiem pojawiają się problemy. A tego właśnie chcemy uniknąć. Do tego widok nie powinien wiedzieć o istnieniu modeli, daje to odpowiednią izolację, dzięki temu, można zmieniać warstwę modelu nie ruszając warstwy widoku. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 12:05 |