Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MVC kolejne kłopoty
Forum PHP.pl > Forum > PHP
athabus
Witam,

Próbuję ogarnąć trochę MVC i tak się zastanawiam, czy jeden widok może korzystać z kilku modeli?.

Dajmy na to mam stronę sklepu internetowego - model jest tu odpowiedzialny za pozyskanie danych o produktach itp. Załóżmy jednak, że lista kategorii jest dość rozbudowana i jest dynamicznie pozyskiwana z bazy danych. W pewnym momencie okazuję się, że jest to też swego rodzaju model. Teraz pytanie jak to zrobić, żeby było zgdonie z MVC.

Do tej pory tworzyłem obiekt menu np. w kotrolerze, i go przekazywałem do widoku, ale zastanawia mnie jak taki problem rozwiązać "prawidłowo".

Druga kwestia tyczy się kontrolera i modelu. Właśnie stworzyłem klasę Request - zbiera ona dane z tablic GET POST itd, wykonuje wskazane testy i przechowuje wartości, które przeszły test. Pytanie czy taki obiekt mogę przekazać bezpośrednio do modelu? Wydaje mi się to najwygodniejsze podejście.
mike
Cytat(athabus @ 8.08.2006, 12:05 ) *
Próbuję ogarnąć trochę MVC i tak się zastanawiam, czy jeden widok może korzystać z kilku modeli?.

Oczywiście.

Cytat(athabus @ 8.08.2006, 12:05 ) *
Druga kwestia tyczy się kontrolera i modelu. Właśnie stworzyłem klasę Request - zbiera ona dane z tablic GET POST itd, wykonuje wskazane testy i przechowuje wartości, które przeszły test. Pytanie czy taki obiekt mogę przekazać bezpośrednio do modelu? Wydaje mi się to najwygodniejsze podejście.

Powinieneś tak napisac model albby dawał dane na podstawie argumentów i nie potrzebował tego obiektu do działania.
Lepiej przekazać te wartości w miejscu gdzie wywołujesz metody modelu, bo inaczej będziesz miał na sztywno.
Model nie będzie mógł wtedy wspołpracować z innym źródłem żądania i bez obiektu Requset.
athabus
Cytat(mike_mech @ 8.08.2006, 10:12 ) *
Powinieneś tak napisac model albby dawał dane na podstawie argumentów i nie potrzebował tego obiektu do działania.
Lepiej przekazać te wartości w miejscu gdzie wywołujesz metody modelu(...)


Kiedyś korzystałem z takiej metody, że widok był pasywny i przekazyałem do niego pramatetry -> w tej wersji widok był po prostu szablonem.

Ostatnio doczytałem, że widok może aktywnie korzystać z modelu -> tzn wywoływać jego metody. I tu zaczyna się problem - bo w takim razie widok powinien mieć dostęp do request - ewentualnie powinien dostać parametry aby móc wywołać funkcję z modelu. Jakoś mi się nie podoba takie podejście, gdyż wtedy mieszają mi się warstwy - widok ma zbyt dużo uprawnień. Wolałbym aby to kotroler / model decydowały o wszystkim a widok tylko wyświetlał.

Może lepiej stworzyć model, z konstruktorem który przyjmuje dane z requesta i odpowienio inicjuje zmienne modelu. czyli zamisat

  1. <?php
  2. public function __construct(Request $objRequest)
  3. ?>

zrobić
  1. <?php
  2. public function __construct($param1, $param 2 itd)
  3. ?>


zmiana może nie duża, ale przynajmniej jawnie widać czego potrzbuje dany model i można przekazać parametry z różnych obiektów).

Przekazanie samego obiektu Request trochę usztywnia projekt, ale z drugiej strony jest dość wygodne. Wszystkie modele są ujednolicone jeśli chodzi o sposób wywołania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.