Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MVC kolejne kłopoty, jeden widok i kilka modeli, obiekt request
athabus
post
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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.
Go to the top of the page
+Quote Post
athabus
post
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post

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: 25.08.2025 - 08:45