Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MVC][PHP]Jak to powinno wyglądać w MVC
marekc12
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

Ostrzeżenie: (0%)
-----


Hej,

dajmy na to, że mam 3 tabele w bazie:

tabela "tytuly": id -- tytul
tabela "tytul_gatunek": id -- tytul_id -- gatunek_id
tabela "gatunki": id -- gatunek

Jak widać druga tabela wiąże poszczególne rekordy z 1. i 2. tabeli ze sobą (relacja wiele do wielu).

Teraz chciałbym wyświetlić listę utworów i przy każdym wypisać do jakich gatunków należy.

Mogę to zrobić np. tak:

W modelu mogę stworzyć klasy dla tabel "tytuly" i "gatunki".

Widok poprosi klasę modelu "tytuly" o listę np. pierwszych 20 tytułów. Widok dostanie tę listę wraz z ich numerami id. Następnie widok poprosi klasę modelu "gatunki" (wysyłając jej numery id tytułów) o tablicę: z listą gatunków dla każdego id tytułu. Widok ją dostanie. Następnie wszystko poskłada i wyświetli.

Wydaje mi się to trochę zagmatwane za bardzo, bo jeśli bym to wszystko zrobił w jeden klasie modelu "tytuły" to zajmowałoby to mniej kodu.

pozdrawiam i z góry dzięki za wyjaśnienie problemu (IMG:style_emoticons/default/smile.gif)

Jak jest poprawnie zgodnie z modelem MVC, czyli jak powinno się to robić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
md1988
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 27.11.2010

Ostrzeżenie: (0%)
-----


Model MVC wyglada ciutke inaczej niż to co powiedziałeś. Przede wszystkim o ile czasami łączy się kontroler z modelem to nigdy nie należy stosować połączenia widok+kontroler.

Zacznijmy może od definicji każdej z warstw składowych MVC:
1.Model - w przypadku który opisujesz byłaby nim klasa zajmująca się komunikacją z bazą danych i umożliwiająca operacje na danych za pomocą odpowiednio abstrakcyjnych metod. Klasa modelu przekazuje przygotowane dane(np. w formie tablicy asocjacyjnej) do kontrolera.
2.Widok - to co zobaczy użytkownik strony, coś co nie jest związane bezpośrednio z przetwarzaniem danych lecz ich wyświetleniem. Przykładowo np. szablon tabeli listy gatunków
2.Kontroler - jądro aplikacji, zajmuje się obsługa logiki aplikacji. Reaguje na zapytania użytkownika wykonując określone akcje na modelu takie jak dodanie danych, ich aktualizacja czy usunięcie.

Przykładowo więc:
Użytkownik wywołuje stronę na której ma być wyświetlonych 20 pierwszych gatunków. Kontroler odbiera to żądanie i posługując się klasą modelu pobiera odpowiednie dane. Następnie używając widoków(w tym choćby szablonu tablicy) buduje stronę z wyświetloną zawartością i wysyła ją użytkownikowi.


Cytat
Wydaje mi się to trochę zagmatwane za bardzo, bo jeśli bym to wszystko zrobił w jeden klasie modelu "tytuły" to zajmowałoby to mniej kodu.

Wzorzec MVC powoduje, że kod który tworzysz jest dużo bardziej elastyczny. Przykładowo chciałbyś by twoja aplikacja korzystała z plików a nie bazy danych. W MVC musisz zmienić jedynie klasę modelu, reszta aplikacji nie powinna wymagać jakichkolwiek zmian. Podobnie zmienić możesz wygląd strony bez grzebania w jej logice. To właśnie jest siła MVC (IMG:style_emoticons/default/smile.gif) I choć fakt więcej się nakodzisz by osiągnąć efekt to potem nie będziesz tego żałował, ten wzorzec znacznie ułatwia utrzymanie porządku w kodzie.

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 12:58