[php]MVC i struktura aplikacji |
[php]MVC i struktura aplikacji |
23.06.2007, 22:55:16
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 1 Dołączył: 15.02.2007 Ostrzeżenie: (0%) |
Hej,
Mam takie pytanie, starm sie napisac strone stosujac wzorzec MVC, stosuje przy tm Smarty i Peara ale to nie wazne. Glowny problem dla mnie tkwi w teorii samego rozwiazania. Otoz jesli chodzi o sterowanie kacja to jest niby wszystko dosc proste ale nie wiem czy zalozenie dobrze rozumiem. Wysiwetlenie strony polega na tym ze zmianie ulega tytul, dane ktore pojawiaja sie w dziale content, tlo strony i boczne menu. Nie wiem wiec czy stosowac i pisac osobne akcje dla kolejnych odslon, czy napisac jedna mmetode klasy Controllera, pobierajaca odpowiednie parametry. Nie chce tutaj podawac kodu, ktory juz napisalem, bo jest go dosc sporo, ale powiem tylko ze obecnie lacze klasy modelu, akcji i widoku z instrukcja switch-case w indexie i wlasnie nie wiem czy teoretycznie jest to zgodne z zalozeniami MVC. Dodam ze nie zalezy mi narazie na optymalizacji skryptu a raczej na zglebieniu samej teorii. Dzieki i pozdrawiam. Ten post edytował MadHatter 24.06.2007, 02:03:50 |
|
|
24.06.2007, 09:16:08
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) |
Wzorce to nie są sztywne założenia że musi być tak i koniec. Są to ... wzorce. Każdy może implementować je inaczej i właśnie to jest w tym najfajniesze.
Więc weźmy na warsztat MVC. Wzorzec mówi nam o tym że aplikacja dzieli się na trzy warstwy - Model, Widok i Kontroler. Oddzielenie tych warstw od siebie daje nam dużą wygodę, by z biegiem czasu odkrywać kolejne plusy tego rozwiązania. A jak to zaprogramujesz? To już zależy od Ciebie. Ja kiedyś rozwiązałem to bardzo prosto, działało szybko i prosto. Mianowicie aplikacja składała się z 3 folderów, Controller, Model i View. W Controller było np. NewsController, z metodami showAll(), showOne(), archive(). Model przechowywał modele - NewsContainer, z metodami getAllNews, getById(). Natomiast w View były zwykłe szablony php. Potraktowałem to bardzo luźno i uważam że tak powinno się traktować wzorce. Dlatego zrób jak uważasz. Jak Ci jest wygodnie. Oczywiście pamiętaj by oddzielić 3 warstwy od siebie, jednak nie rób czegoś na siłę - np. tego że muszą być akcje czy coś tam jeszcze ciekawego. Możesz ewentualnie podpatrzeć rozwiązania jakie są zastosowane w frameworkach np. agavi. Pozdrawiam. -------------------- |
|
|
24.06.2007, 09:55:55
Post
#3
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 1 Dołączył: 16.04.2006 Skąd: Łódź Ostrzeżenie: (0%) |
Cytat Natomiast w View były zwykłe szablony php. Nie zgodze się z tym. W wielu fw. szablony sa traktowane jako widok, a nie powinny. Jest to oczywiście "pójście na łatwiznę". Chodzi o to, że jeżeli generujemy sobie www to jest ok, ale jak ma dojsc do generacji PDF, czy XML' a ? Chyba nie bardzo już by działało. Zadaniem kontrolera jest podać do warstwy widoku dane, jego nie interesuje w jaki sposob widok je wyświetli - Jak mu sie zachce wygeneruje z tymi danymi PDF, a jak ie to wgra szablon i wygeneruje (X)HTML'a... |
|
|
24.06.2007, 10:03:44
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) |
Owszem tak zrobiłem, bo tak było mi wygodnie i szybko. Nie potrzebowałem generowania fikuśnych rzeczy. Ja nie zgodzę się że:
Cytat W wielu fw. szablony sa traktowane jako widok, a nie powinny Nie zgodzę się bo to w sumie jest nie prawda. Czemu nie powinny? Widok to warstwa prezenacji, a plik php z html jak najbardziej nim jest. A to że nie będę miał opcji generowania PDFów, XML itp to inna para kaloszy. Jednak jak najbardziej jest to poprawne. Zresztą, dyskusja na temat MVC jest w odpowiednim dziale i tam zapraszam zainteresowanych Chyba że autor ma jakieś nie jasności u siebie w projekcie. -------------------- |
|
|
24.06.2007, 11:14:57
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 1 Dołączył: 15.02.2007 Ostrzeżenie: (0%) |
Dziekuje za odpowiedzi. Nie chce robic offtopa, jesli to zly dzial, ale jak zaczalem pytac, to poprostu chodzi o to czy dobrze rozumiem idee MVC, czy np. instrukvja case, ktora podaje pod spodem a ktora znajduje sie w pliku index, powinna byc wlasnie tam, a jesli nie to jakie miejsce jest najbardziej odpowiednie dla niej. Mam obawe wpychania jej w metode jakiejs klasy, z tego wzgledu ze zdaje mi sie iz klasy powinny byc jak najbardziej ogolne(tylko wzorami dla obiektow), jesli wiec w klasie umiescilnbym tak szczegolowe parametry $tablica settings, to czy nie kluci sie tym samym z zalozeniami elastycznosci OOP. Wybaczcie prostote kodu, wolalem spytac, zanim klasy nie roznasnal sie bardziej tracac czytelnosc.
Plik index.php:
i klasa view:
Dzieki i pozdrawiam! |
|
|
24.06.2007, 11:32:18
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) |
Mieszasz ze sobą warstwy modelu i kontrolera.
To są szczegóły związane z wyświetlaniem i pobieraniem danych. Pobieranie jest związane z warstwą modelu, a wyświetlanie z widokiem. Kontroler nie ma prawa wiedzieć nic o zapytaniach do bazy czy tytule strony. On ma wywołać akcję, która pobierze dane i zwróci je (za jego pośrednictwem) do widoku. Czyli:
Ten post edytował Ludvik 24.06.2007, 11:32:47 -------------------- |
|
|
25.06.2007, 10:51:20
Post
#7
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 1 Dołączył: 15.02.2007 Ostrzeżenie: (0%) |
Hej,
Dzieki za odpowiedz. Napisze juz super szybko zeby nie truc: Problem w tym, ze normalnie za wyswietlanie strony powinna byc odpowiedzialna jaksa akcja. Poszczegolne odslony, nie zmieniaja, sie z wyjatkiem tego co wypluwa baza danych, iloscia kolumn, rlem i tematem(to widac w tablicy $settings z mojego postu). Niestety tabele sa tak dziwnie zrobione, ze nie mozna napisac prostej metody modelu, lub kilku i je wywolywac, Wlasciwie kazdy dzial ma niestety inna tabele, inne nazwy pol(bez ladu zadnego), w zwiazku z tym zastanawiam sie czy do kazdje strony(odslony) powininenm napisac inna akcje, bo w przeciwym razie wyghlada na to ze pozostaje mi takie wlasnie mieszanie widoku z modelem i kontrolerem o jakim napisales lsusznie... Pozdrawiam! |
|
|
26.06.2007, 11:36:50
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) |
Skoro na każdej stronie wykonujesz różne czynności, to za każdą czynność odpowiada inna akcja. Każda z nich zwraca jakiś zbiór danych, który następnie trafia do widoku. Widok możesz zrobić bardzo prosty: kontroler (z pomocą modelu) wybiera odpowiedni widok. Jeżeli masz elementy wspólne na wszystkich stronach, możesz zagnieździć szablon w drugim, ogólniejszym.
Zauważ, że w każdej akcji operujesz na danych tak jak chcesz... Zwracasz tylko zbiór danych, który ma być wyświetlony... -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 18:44 |