PHP MVC - jak projektować?

Jestem stosunkowo dobrze zorientowany w projektowaniu stron internetowych. Najczęściej wybieram lampy, w których Mam już mały "framework", którego używam. Krótko mówiąc, oddziela logikę od układu i mam w zasadzie jeden plik logiki do jednego lub wielu plików układu w zależności od tego, jakie widoki są obsługiwane w układzie. Jest sekcja adminów i jest User auth i takie tam. Dobrze.

Tak więc, gdy szukam bardziej rozbudowany w mój sposób projektowania / programowania w PHP - lub strony internetowej programowanie w ogóle-zastanawiam się jak właściwie "myśleć" MVC. Skłaniam się ku temu, ponieważ mój obecny framework jest bardzo zorientowany na DB i stał się nieco ciężki, gdzie wydajność jest najważniejsza.

Oto moje pytanie: czy mam rację zakładając, że kontroler zazwyczaj odpowiada "sekcji" lub "stronie", a Widok zajmuje się wyświetlaniem tego kontrolera, a model obsługuje obiekty używane przez kontroler i wyświetlane w widokach?

Weźmy przykład (niezbyt rozbudowany, ale wystarczająco, aby sprawdzić, czy moje myślenie jest słuszne):

Powiedzmy, że mamy prostą stronę z Grami. Sekcje zazwyczaj są takie jak: frontpage, gry, fora, o / zastrzeżenia itp.

Klasy kontrolera odpowiadają sekcjom, ale są nieco bardziej rozbudowane, aby pokryć "pojedynczą instancję" obiektu objętego sekcją, tzn. sekcja gier staje się dwoma kontrolerami; jednym do przeglądania gier (lista gier) i jeden dla samej strony gry. Całość byłaby czymś w rodzaju frontpage, games-overview, gamepage, forums, forum, topic-page, about, and disclaimer.

Widoki mogą być wieloma układami dla każdego kontrolera, np. takimi samymi jak kontrolery, ale być może różnymi rodzajami widoków na stronach forów (w zależności od tego, jak chcesz je wyświetlić) i na stronach gier (może wyświetlanie najlepszych wyników) itd.

Model (lub dataobjects) to zazwyczaj użytkownicy, gry, fora, Tematy, Posty, a następnie wiele obiektów pomocniczych, takich jak tagi tematu, najlepsze wyniki Gry i co nie, aby tematy można kategoryzować i gry w stanie mieć najlepsze wyniki itp itd.

Czy powyższy "poprawny" sposób myślenia, czy też całkowicie nie rozumiem całej koncepcji M-V-C dla stron internetowych.

Zastanawiam się nad przejściem na CodeIgniter lub jakiś inny Framework (zapraszam do komentowania wyboru frameworka lub czy lepiej wybrać mój własne), ponieważ mój własny framework jest bardzo zorientowany na DB i nie tnie go teraz, gdy kilka moich witryn przekracza 70,000 odsłon / dzień.

Szczere podziękowania dla tych z Was, którzy mogą pomóc w odpowiedzi, Czy moje podejście do MVC jest w pewnym sensie poprawne, a także, jeśli to możliwe, dodaj kilka wskazówek, o czym myśleć podczas kodowania MVC i nadal chcesz zachować najnowocześniejszą wydajność (jak najwięcej jest to możliwe w językach skryptowych).

Author: Adergaard, 2009-10-11

3 answers

Po pierwsze, nie jest to pytanie specyficzne dla php, ale raczej pytanie o to, jak zastosować wzorzec MVC do programowania stron internetowych. I rzeczywiście wzór MVC ma tak duży sens w dziedzinie tworzenia aplikacji internetowych, że stał się niemal imperatywem w tej dziedzinie aplikacji.

Teraz, co do samego wzorca MVC, znajdziesz już bardzo dobre odpowiedzi na SO. Na przykład pytanie i odpowiedzi co wchodzi do kontrolera .

Co do pytanie jak mapować strukturę witryny do architektury kontrolera polecam następujące.

  • nie staraj się mapować nawigacji, ale raczej logiki aplikacji
  • jeden kontroler dla każdej logicznej jednostki funkcji
  • wewnątrz kontrolerów jedna publiczna metoda dla każdego widoku
  • raczej chude kontrolery, które głównie odtwarzają bramki między modelami i widokami

Więc na przykład, jeśli w Twoim przypadku gameoverview jest tylko listą, nie potrzebuje własnego kontrolera, ale raczej jest tylko metodą w indexcontroller, która pobiera listę z modelu i wysyła ją do odpowiedniego widoku. Ale jeśli twój gameoverview jest złożonym mechanizmem z wieloma możliwościami i różnymi podglądami itp. możesz mieć przeglądkontroler z kilkoma metodami dla różnych widoków i zadań.

Naprawdę polecam przyjrzeć się Zend Framework i jak te problemy są tam rozwiązywane. IMO można się naprawdę wiele dowiedzieć na temat swojego pytaj, robiąc to.

 3
Author: markus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:28:18

CodeIgniter to świetne narzędzie dla początkujących MVC, Proponuję spojrzeć na net.tutsplus.com trwa samouczek wideo na temat CodeIgniter

Dodano

Dla początkujących chcących zanurzyć się w CI, linki do videotuts:

Dodano

Nie polecam CI jako świetnego i potężnego frameworka, ale jest prosty dla początkujących i mogą się z niego wiele nauczyć, osobiście jestem za Symfony i Yii

 1
Author: Juraj Blahunka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 13:04:52

Wikipedia jest prawdopodobnie lepsza w wyjaśnieniu tego, ale zasadniczo,

Twój model reprezentuje, i abstrakty, podstawowe dane (np. zapewnia warstwę abstrakcji, więc inne elementy nie muszą wchodzić w interakcję z bazą danych... lub nawet wiedzieć, że tam jest).

Twój kontroler obsługuje żądania zmiany modelu.

Twój Widok to wyświetlanie części modelu i informacji zwrotnych ze sterownika.

Ani kontroler, ani model nie powinny obsługiwać wyświetlacz. wyświetlacz. Ani model, ani widok nie powinny obsługiwać przychodzących danych postu lub tym podobnych. Ani administrator, ani widok nie powinny zajmować się źródłami danych.

Zobacz http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#Description za dobry opis ról.

To co opisujesz w pytaniu nie pasuje do tego opisu. Powinien być, powiedzmy, jeden kontroler na klasę modelu (lub mniej) do obsługi żądań do elementów tych modeli klasy reprezentują.

Twoje widoki nie powinny być bezpośrednio powiązane z żadnym kontrolerem lub elementem modelu. widok reprezentuje podzbiór modelu jako całości.

Jedyną interakcją między widokiem a kontrolerem jest wyświetlanie sprzężenia zwrotnego.

Miejmy nadzieję, że to pomoże.

Edytuj: Jak zauważyli inni, istnieje już wiele frameworków MVC. (Patrz http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#PHP na listę) I ja odradzam zbyt przywiązanie do frameworka, który już zbudowałeś, jeśli jest inny, który lepiej wykonuje swoją pracę.

 0
Author: Jonathan Fingland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 11:48:27