Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] [MVC] Operacje na danych
Vinnie
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.10.2010

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


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.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Nic nie stoi na przeszkodzie by model udostępniał metodę pozwalającą na pobranie sformatowanego numeru, przykładowo:
  1. $abcMyModel->getFormattedPhonenumber(Phonenumber.FORMAT_ABC);


Ten post edytował Crozin 21.10.2010, 06:30:06
Go to the top of the page
+Quote Post
Vinnie
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.10.2010

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


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?
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.10.2010

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


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?
Go to the top of the page
+Quote Post
askone
post
Post #6





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Jeśli z widoku będziesz wołał model to pomiń całkowicie wydzieranie się kontrolera na model (IMG:style_emoticons/default/winksmiley.jpg) . Wtedy już tylko widok drze się na model o dane sformatowane...
Go to the top of the page
+Quote Post
Vinnie
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.10.2010

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


@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ć....
Go to the top of the page
+Quote Post
askone
post
Post #8





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Współpraca obiektów w MVC to temat rzeka (IMG:style_emoticons/default/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...
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tutaj masz o tym co jest MVC, a co nie jest: Temat: Wzorce architektoniczne
Go to the top of the page
+Quote Post
Pilsener
post
Post #10





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.10.2010

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


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?

Ten post edytował Vinnie 21.10.2010, 14:45:00
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: 23.08.2025 - 06:53