![]() ![]() |
Post
#21
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Ja w swoich pracach najczęściej korzystam z modelu wspomnianego przez dr4ko, gdyż jest moim zdaniem w chwili obecnej najbardziej adekwatny do sposobu działania aplikacji webowych, gdyż zgodna z przepływem informacji. User coś robi w widoku i te działania muszą być przechwycone, rozpoznane, a w tym celu powstał kontroler i to on musi zareagować odpowiednimi danymi wyciągniętymi z modelu. Te idelanie, gdyby mozna przesłać z modelu wprost do widoku. Tyle, że to wiązalo by się ze stworzeniem tak modelu, iżw odpowiedzi do widoku szedł by świetnie sparsowany i dostosowany do jego struktury pakiet danych lub widok zmieniał się dostosowując do formy odpowiedzi modelu. A to nie jest w zasadzie możliwe bez wpływu kontrolera. Najlepsze byłoby pełne uniezaleznienie warstw, gdzie każda mogła się odnosić do pozostałych bez konieczności pośrednictwa trzeciej czyli coś w stylu znaczka recycligu ale dwukierunkowego. Tylko czy jest realne do stworzenia takie coś, gdzie choćby model sam sobie wywołuje widok zależnie od danych?
|
|
|
|
Post
#22
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%)
|
|
|
|
|
Post
#23
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Cytat @Zyx nie zgadzam się z Twoją wizją MVC. Nie lubię takich trochę personalnych docinków, ale... nie ma to jak uargumentowana opinia. Poza tym to nie jest wizja Zyxa, tylko założenia tego wzorca (który nie był tworzony z myślą o "środowisku webowym", w którym to ten wzorzec najczęściej jest skopany).
|
|
|
|
Post
#24
|
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%)
|
Cytat Nie lubię takich trochę personalnych docinków, ale... nie ma to jak uargumentowana opinia. Poza tym to nie jest wizja Zyxa, tylko założenia tego wzorca (który nie był tworzony z myślą o "środowisku webowym", w którym to ten wzorzec najczęściej jest skopany). A gdzie tak jest napisane ze jest dobrze jak to on mowi na wiki na temat MVC pisza inaczej chyba ze mam problemy z czytaniem. |
|
|
|
Post
#25
|
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%)
|
A gdzie tak jest napisane ze jest dobrze jak to on mowi na wiki na temat MVC pisza inaczej chyba ze mam problemy z czytaniem. Chyba masz problemy z czytaniem: http://en.wikipedia.org/wiki/MVC_Pattern#Overview A konkretniej zdanie "A view queries the model in order to generate an appropriate user interface". Osobną kwestią jest to, że wikipedia to nie zbyt wiarygodne źródło, zwłaszcza jeśli chodzi o takie informacje. Prosty przykład w MVC jaki serwuje ZF, symfony i inne frameworki: Chcemy pobrać stronicowaną listę elementów modelu, w kontrolerze (lub też w modelu) tworzymy obiekt paginatora, mówimy mu aby pobrał takie i takie elementy. Kontroler przekazuje paginator do widoku, który wyświetla to co w nim jest. Konsekwencje: kontroler miesza się w warstwę prezentacji, bo to widok na podstawie modelu powinien decydować o tym czy dane są stronicowane i co ile. Chcemy zmienić liczbę wyświetlanych elementów lub wyłączyć stronicowanie, paradoksalnie musimy edytować kontroler - widok i kontroler wcale nie są niezależne. W implementacji podanej przez @Zyxa to inaczej wygląda, w widoku (na podstawie danych zawartych w modelu) zachodzi decyzja czy dana lista ma być stronicowana, czy też nie. Kontroler jedynie mówi: ten i ten widok ma wyświetlić ten i ten model, nie mówi jak ma go wyświetlić, czy to ma być paginowalna lista, czy też nie. W tej implementacji MVC widok ma więcej zadań i w przeciwieństwie do znanych frameworków dla php potrzebnych będzie wiele klas widoku do różnych zadań. Bezpośrednie powiązanie między widokiem, a modelem jest widoczne zwłaszcza w aplikacjach desktopowych, przykładowo Java i implementacja swingowej tabeli. Klasa JTable - widok, jest też jakaś klasa odpowiedzialna za model tabeli (nie pamiętam nazwy, pewnie JTableModel (IMG:style_emoticons/default/tongue.gif) ). Model przekazuje się bezpośrednio do konstruktora JTable, to widok bezpośrednio pobiera sobie dane z modelu, model może poinformować widok o tym, że zaszła w nim jakaś zmiana, a widok odświeży się (wzorzec obserwatora - pisał o tym @Zyx) - w aplikacjach www taki feature nie jest potrzebny gdyż http jest protokołem synchronicznym. Aplikacje dektopowe, a aplikacje internetowe to całkowicie dwie różne rzeczy, w aplikacjach www (mówię tutaj o frameworkach php) utarło się że to kontroler jest bliżej modelu niż widok, który służy tylko do prezentacji danych. Ma to swoje plusy oraz minusy. |
|
|
|
Post
#26
|
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. |
@Zyx - Co do pobierania danych przez widok: http://www.apostrophenow.com
Szczególnie polecam manual dla developerów. Pozdrawiam |
|
|
|
Post
#27
|
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%)
|
Jak dla mnie to kontroler powinien zawierac cala logike kodu a widok tylko czesc prezentacyjna.
Cytat Kontroler jedynie mówi: ten i ten widok ma wyświetlić ten i ten model, nie mówi jak ma go wyświetlić, czy to ma być paginowalna lista, czy też nie. W tej implementacji MVC widok ma więcej zadań i w przeciwieństwie do znanych frameworków dla php potrzebnych będzie wiele klas widoku do różnych zadań. No wlasnie ja tak mam mam glowny widoku komponentu news a w nim miejsce dla paginacji jesli paginacja jest to tylko podpinam pod dana zmienna z szablonu widok paginacji i po wtokach nie musze ingerowac w kod modelu. |
|
|
|
Post
#28
|
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 7 Dołączył: 3.02.2007 Ostrzeżenie: (0%)
|
Witam
Przepraszam, że odświeżam wątek, ale to chyba jedyny w języku polskim, gdzie jest dość głęboko poruszony ten temat. Mam straszny mętlik, przez te wszystkie niejasności naprawdę zastanawiam się, czy nie zaniechać próby zastosowania. Ogólnie chciałem zacząć programować, nie wiem czy z wykorzystaniem poprawnego modelu MVC czy nie, ale chyba w sposób podobny jak większość osób pojmuje MVC czy pseudo-MVC. Więc: Mam sobie plik index.php (z tego co wyczytałem powinienem nazywać go bootsraper czy jakoś tak). Daruję sobie jednak te wszystkie ładnie brzmiące pojęcia, niezrozumiałe dla 90% ludzi chcących cokolwiek z tego wszystkiego zrozumieć, więc wybaczcie (IMG:style_emoticons/default/biggrin.gif) . Wracając do tego jak ja chciałbym tworzyć swoje aplikacje. Plik index.php, który w moim przypadku jest plikiem, gdzie są same includy. Teraz chcąc być zgodny z MVC czy pseudo-MVC, tylko bardziej po swojemu (IMG:style_emoticons/default/tongue.gif) , tworzę sobie 3 foldery _views, _controllers, _models. Jak już wcześniej pisałem zdaję sobie sprawę, że samo MVC jest różnie interpretowane ale jakąś koncepcję muszę przyjąć więc przyjąłem taką: _views - zawiera czyste pliczki html z wstawionymi danymi z modeli _models - zawiera klasy z samymi zapytaniami do bazy czy odwolaniami do plików textowych, obrazkowych czy jeszcze innych, gdzie znajduja się jakiekolwiek dane _controllers - zawiera klasy sterujące danymi i wysyłające je do odpowiednich widoków. Bardzo chciałbym trzymać się przyjętej przeze mnie ideologii, jednak już w zasadzie na początku napotkałem na dość prozaiczne problemy. Weźmy sobie ot taki prosty przykład jak menu, ktore widok powinien pokazać w taki sposób: i teraz co zrobić, żeby pętelka wyświetliła mi te wszystkie ...widzę 3 wyjścia i nie wiem które powinienem zastosować, każde wg mnie albo odbiega od przyjętego przeze mnie wzorca, albo komplikuje niepotrzebnie i rozdrabnia widoki: przypadek 1: wewalam część kontrolera do widoku (dokładnie kod pętli) jednak cały kod html dzięki temu jest w widoku przypadek 2: pętelka zostaje w widoku, jednak część kodu html musi się znaleźć w kontrolerze. przypadek 3: tworzę osobny, malutki widok i teraz kontroler przy każdym kroku pętli korzysta z tego widoku, po czym na koniec całość wysyła do widoku menu. Wg mnie żadne z tych rozwiązań nie jest poprawne i ciekawi mnie czy jest jakieś inne wyjście, które pozostanie zgodne z przyjętym przeze mnie wzorcem. Jest jeszcze 4 przyadek gdzie ten kawałek html jest w modelu ale to też wydaje mi się bez sensu. Bardzo proszę napraowadźcie mnie jak prawidłowo powinno się to zrobić, po kilku dniach próby zrozumienia o co w tym wszystkim chodzi, coraz bardziej utwierdzam się w przekonaniu, że albo nie nadaję się na webmastera i nie powinienem się wogóle nim określać, albo po prostu coś tutaj nie do końca jest przemyślane, lub wogólę nie pojmuję idei rozdzielenia poszczególnych warstw. PS. Przepraszam, za tak prozaiczny przykład jednak myślę, że zbyt dużo czytamy w artykułach "ciężkich" tekstów z trudnymi przykładami i dlatego też wiele osób rezygnuje z prób dostosowania się do jakichkolwiek ogólnie przyjętych standardów. Bardzo bym chciał, żeby pojawiało się więcej bardzo prostych przykładów opisanych prostym językiem, bez zbednych niezrozumiałych terminów. Jakby ktoś był tak miły i spróbował przedstawić swoją interpretację MVC, jednak na konkretnym bardzo prostym przykładzie, choćby wyswietlenia prostego menu to już wogóle było by bosko (IMG:style_emoticons/default/smile.gif) dziękuję za uwagę i przepraszam jeśli moja wypowiedź nie jest na poziomie tego forum. Ten post edytował WiruSSS 22.03.2012, 02:41:29 |
|
|
|
Post
#29
|
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%)
|
PHP jest stosowane w widoku do prostego wyświetlania danych. Czyli pętla będzie prawidłowa. Ale lepiej by było gdybyś zastosował jakiś system szablonów np http://phptal.org gdzie ten kod miałby postać:
Załóżmy. Czytelne, w postaci XMLowej i jeszcze z parsowaniem poprawności. |
|
|
|
Post
#30
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Najprostsze rozwiązanie? Kontroler przekazuje do widoku tablicę (lub jakąkolwiek formę kolekcji). Elementy tej tablicy (kolekcji) też są tablicami (lub obiektami) i zawierają adres oraz anchor linku. Widok zawiera pętlę wyświetlającą:
Przykładowo: W kontrolerze masz obiekt widoku, który ma składową odpowiedzialną za linki w menu:
W widoku masz do niej dostęp i możesz w pewnym jej fragmencie dać takie użycie: Tyle, że to nie jest już ściśle rzecz mówiąc MVC ale MVP. Nie ma tu bowiem tyle kontrolera, co prezenter, który pobiera dane z modelu i wrzuca do widoku. |
|
|
|
Post
#31
|
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 7 Dołączył: 3.02.2007 Ostrzeżenie: (0%)
|
tak myślałem robić jednak mam odczucie że taki sposób jest jużniezgodny z samym MVC. Co do systemu szablonów może kiedyś się przkonam, jak narazie chciałbym korzystać z jak najmniejszej potrzebnej liczby rozszerzeń.
|
|
|
|
Post
#32
|
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%)
|
Tylko pamiętaj że szablony są i tak kompilowane do czystego kodu PHP. Tylko dla jednej odsłony będzie więcej przetwarzania. A porównaj sobie kod obu przedstawionych rozwiązań i pomyśl że masz do przedstawienia coś bardziej zaawansowanego niż tylko ta jedna lista. Później jest taki bajzel że nie da się nad tym panować. Już nie mówiąc że te dane będziesz musiał jeszcze owinąć w htmlentities().
|
|
|
|
![]() ![]() |
|
Aktualny czas: 13.06.2026 - 16:55 |