Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [MVC] Operacje na danych
Forum PHP.pl > Forum > Przedszkole
Vinnie
Po pierwsze witam na forum. Świetny portal i nie raz mnie ratował, ale do rzeczy.

Ostatnio zabrałem się za robienie dość sporej aplikacji opartej o model MVC i mam mały problem z umieszczeniem logicznie gdzie powinny znajdować się operacje wykonywane na danych. W modelu czy w kontrolerze?

Mini framework już mam, czyli Model -> wyciąganie i zapisywanie danych do bazy, Widok -> GUI dla użytkownika, Kontroler -> zarządza całą imprezą. Teraz, w której warstwie umieścić operacje na danych. Chodzi np o to że do bazy zapisuje numer telefonu w postaci 123456789, a w widoku chcę go mieć jako 123-456-789. Czy funkcja formatuj_numer_tel powinna być wywołana w modelu, zaraz po wywołaniu kwerendy i przypisaniu do obiektu danych, czy w kontrolerze, który de facto wywołuje funkcję Modelu "select" ? bo na bank nie w widoku, choć powoli zaczynam wątpić....

Niby proste pytanie, a nie umiem sobie jakoś poradzić.

Z góry dzięki za pomoc.

Crozin
Nic nie stoi na przeszkodzie by model udostępniał metodę pozwalającą na pobranie sformatowanego numeru, przykładowo:
  1. $abcMyModel->getFormattedPhonenumber(Phonenumber.FORMAT_ABC);
Vinnie
No tak, i wtedy to wywołanie będzie szło z kontrolera. Bo póki co zrobiłem to tak, że model tak jak napisałem wywołuje kwerendę, i parsuje ją jako zmienne, a póżniej kontroler przypisuje jako zmienne do widoku.

Czyli metody operacji na zmiennych należą do modela, a wywołania z poziomu kontrolera. Dobrze rozumiem?
Crozin
Źle.

1. Taka konstrukcja powinna znaleźć się w widoku, a konkretniej w jakimś szablonie.
2. W szablonie powinno być bezpośrednie odwołanie do modelu, nie ma potrzeby by kontroler przesyłał te dane do szablonu.
Vinnie
Dobra jeszcze raz łopatologicznie, bo się już sam pogubiłem.

Krok1: Użytkownik wpisuje/klika adres.
Krok2: Kontroler dowiaduje się o tym pierwszy i zaczyna krzyczeć
Krok3: Kontroler drze się na Model żeby mu podał dane
Krok4: Model woła SQL
Krok5: Model dostaje dane
Krok6: Model wręcza kontrolerowi dane
Krok7: Kontroler wyciąga Widok z imprezy i podaje mu dane
Krok8: Widok trzeźwieje patrząc na datę, bo dostał liczbę sekund od 1-1-1970
Krok9: Widok drze się na Model żeby mu te dane sformatował
Krok10: Model przeprasza i formatuje dane, po czym zwraca je do widoku.
Krok11: Widok wyświetla dane Użytkownikowi i wraca na imprezę.

Czy tak?
askone
Jeśli z widoku będziesz wołał model to pomiń całkowicie wydzieranie się kontrolera na model winksmiley.jpg. Wtedy już tylko widok drze się na model o dane sformatowane...
Vinnie
@askone
Hmm.... ale czy tak to powinno być? Ja przedstawiłem powiedzmy subiektywną wersję tego jak to widzę. Tylko z tego co się naczytałem o powiązaniach w MVC to właśnie Kontroler powinien dostać dane z Modelu i przekazać je do Widoku. I tak jak napisał Crozin w pkt2. Bo jeśli mam pominąć powiązanie K-M to w sumie jedynym zadaniem Kontrolera będzie wywołanie widoku. A widok powinien dostać dane z Kontrolera i tylko niektóre z nich sformatować, a resztę wyświetlić jak jest. Chyba zaczynam bredzić....
askone
Współpraca obiektów w MVC to temat rzeka winksmiley.jpg Wystarczy, że zerkniesz na blog Zyx'a i poczytasz notkę wraz z komentarzami. Tutaj też chyba był podobny wątek - nie pamiętam dokładnie...

Osobiście stosuję rozwiązanie wykorzystujące kontroler do pośredniczenia w przekazywaniu danych - tak się kiedyś nauczyłem z materiałów dostępnych w sieci - aktualnie mi to pasuje więc nie zamierzam tego zmieniać. Decyzja odnośnie sposobu rozwiązania należy do Ciebie...
Crozin
Tutaj masz o tym co jest MVC, a co nie jest: Temat: Wzorce architektoniczne
Pilsener
Cytat
do bazy zapisuje numer telefonu w postaci 123456789, a w widoku chcę go mieć jako 123-456-789
- to formatuj to w widoku, wtedy łatwo ktoś może zmienić format daty bez grzebania się w modelach czy kontrolerach, model może jedynie zwracać jakieś defaultowe formatowanie ustawione w .ini lub bezpośrednio w modelu (jeśli jest taka potrzeba).
Vinnie
Właśnie przeczytałem: Wpis MVC na Zyx Blog i wątek od Crozin.... a właściwie to Wzorzec MVC wg Crozin

Doszedłem też do pierwszy raz do wniosku, że mvc w php to jakaś potworna abstrakcja..... Przyzwyczajony byłem do modelu z C++, a tu się okazuje, że w PHP to kompletnie inna bajka.

Właśnie przerabiam swój framework. Zrobie tak jak radzicie. Czyli Model - wszystkie operacje na danych, Widok - wywołanie plików template i umieszczenie danych z Modela, Kontroler - inicjalizacja Widoku i Modela.

Brzmi logicznie?
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.