Vinnie
20.10.2010, 23:14:32
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
21.10.2010, 06:29:55
Nic nie stoi na przeszkodzie by model udostępniał metodę pozwalającą na pobranie sformatowanego numeru, przykładowo:
$abcMyModel->getFormattedPhonenumber(Phonenumber.FORMAT_ABC);
Vinnie
21.10.2010, 12:07:04
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
21.10.2010, 12:11:17
Ź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
21.10.2010, 13:03:39
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
21.10.2010, 13:07:18
Jeśli z widoku będziesz wołał model to pomiń całkowicie wydzieranie się kontrolera na model

. Wtedy już tylko widok drze się na model o dane sformatowane...
Vinnie
21.10.2010, 13:18:31
@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
21.10.2010, 13:32:17
Współpraca obiektów w MVC to temat rzeka

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
21.10.2010, 13:52:38
Tutaj masz o tym co jest MVC, a co nie jest:
Temat: Wzorce architektoniczne
Pilsener
21.10.2010, 14:19:28
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
21.10.2010, 14:41:20
Właśnie przeczytałem:
Wpis MVC na Zyx Blog i wątek od Crozin.... a właściwie to
Wzorzec MVC wg CrozinDoszedł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.