![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
Witam,
tak sobie grzebie na forum, szukam różnych ciekawych rzeczy o kohanaphp... no i znalazłem coś takiego: http://phpfi.com/327959 w temacie http://forum.php.pl/index.php?s=&showt...st&p=487669 i się zastanawiam czy właśnie tak powinien wyglądać model? Tyle ifów i nawet jakies komunikaty:
Myślałem że takimi rzeczami zajmują się metody controllera... Czy tak powinno się to robić? Ten post edytował terabit 11.08.2008, 21:50:41 -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tak, to jest istota modelu, żeby chować implementację źródła danych. Większość frameworków źle pojmuję istotę M w MVC udostępniając ActiveRecord (Cake), ORM (Symfony) czy coś jeszcze innego (ZF) i wpajając, że tak powinno być.
Przeczytaj ten post ActiveRecord sucks, but Kore Nordmann is wrong, a dokładnie zrozumiesz o co chodzi. Przytoczę tutaj jedno z moich doświadczeń. Napisałem całkiem ciekawą aplikację dla małej budżetówki. Oparłem to o Agavi (gdzie Model jet interpretowany poprawnie) i całość operacji na bazie (Propel) zamknąłem w obiektach modelu udostępniając jedynie odpowiednie metody. Jak przyszło co do czego biedna budżetówka na serwer mogła dać jakiegoś stary Durona z 512MB (aplikacja wewnątrz sieci) - nawet nie wyobrażasz sobie jak łatwo i SZYBKO przepisałem większość modeli, by używało nie Propela (która jest trasznie pamięciożerny i dławił serwer),a czyste mysql_* Mogę się spierać jedynie z komunikatami wewnątrz modelu, ale to juz zalezy od programisty, wazne, że ogólnie jest w porządku. EDIT: Zapomniałem dodać, że owe przepisanie modelu odbyło sie bez najmniejszego tykania Kontrolerów/Akcji i Widoków. Ten post edytował LBO 11.08.2008, 22:05:56 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
jak dla mnie to powinno byc w widoku
![]() model -> dane kontroler -> sterowanie widok -> GUI ![]() -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Co powinno być w widoku?
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
sorki my bug
![]() ![]() -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
sorki my bug ![]() ![]() No to jeżeli już o tym mowa to ja takie komunikaty umieszczam w widoku. W kontrolerze analizuje co zwrócił model np: jeżeli przy pobieraniu listy czegoś zwróci pusty wynik uruchamiam widok "NotFound" (w którym informacje już są), jeżeli coś jest to widok "List", jak rzuci wyjątkiem to na odpowiednia stronę błędu etc. Komunikaty w widokach, które odzwierciedlają naturę tych komunikatów. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
sorki my bug ![]() ![]() hmmm jak w widoku? przecież komunikaty wyswietlamy jesli cos sie tam stalo... wiec wedlug mnie pobinien byc w kontrolerze i przekazywany do widoku gdy bedzie taka potrzeba :] --- LBO byłeś szybszy ![]() właśnie o coś takiego mi chodziło Ten post edytował terabit 11.08.2008, 22:18:19 -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 81 Dołączył: 6.04.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
dokladnie o to mi chodzi
![]() ![]() -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
i jeszcze jedna sprawa:
zerknijcie tutaj: http://forum.php.pl/index.php?showtopic=96...=0&p=487669 w modelu pętle? i w ogóle to mi się coś nie podoba :/ czy to nie powinie być kontroler?
oczywiście troszkę inaczej... ![]() Ten post edytował terabit 11.08.2008, 22:24:38 -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
wiec wedlug mnie pobinien byc w kontrolerze i przekazywany do widoku gdy bedzie taka potrz Wiesz, boli mnie jak widzę też interpretację Widoku w MVC serwowana przez frameworki :/
W sumie wtedy można powiedzieć, że robisz to w kontrolerze. W Agavi natomiast widok to zupełnie inna sprawa, każdy rodzaj widoku to osobna klasa, ze swoją logiką i metodami.
<?php foreach($query as $row) { $this->session->set('isLogin', TRUE); $this->session->set('id', $row->user_id); $this->session->set('login', $row->user_name); $this->session->set('email', $row->user_email); $this->session->set('lastvisit', $row->user_last_login); $this->session->set('role', $row->role_id); $this->db->from('users'); $this->db->set(array('user_logins_count' => $row->user_logins_count+1, 'user_cookie_key' => $cookie_key, 'user_last_ip' => $this->input->ip_address(), 'user_last_login' => mktime())); $this->db->where(array('user_id' => $data[0], 'user_cookie_key' => $data[1])); $this->db->update(); ?>[/php] oczywiście troszkę inaczej... ![]() To już robisz jak chcesz, teoretycznie model powinien zamknąć w sobie całość działania aplikacji, więc kod powyżej się nie kłoci z tym. W agavi (jak i w Symfony) istnieje obiekt sessionUser, w którym w odpowiedniej metodzie inicjalizacyjnej uruchamiam model użytkownika, pobieram dane i ustawiam wartości zmiennych sesji. Ale jakby tego nie było, prawdopodobnie bym użył modelu. Ten post edytował LBO 11.08.2008, 22:46:34 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
czyli właściwie kontroler powinien tylko pośredniczyć miedzy widokiem a modelem, pobiera z modelu i wrzuca do widoku... żadnych zbędnych pętli etc
![]() -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie - model pobiera dane (czy z bazy, czy z Jakiegoś API sieci), zwraca dane (dobrze jak zwraca jakieś w ustalonym formacie, czyli np tablice, a nie obiekty należące np do ORM) i robi jakieś dodatkowe rzeczy (jak ustawianie zmiennych sesji, jezeli zajdzie potrzeba).
Mam nadzieję, że ---> POMOGŁEM <---- ![]() |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
oczywiście że pomogłeś :]
dodatkowo bardzo proszę o jakiś post od Pana Normanosa bo z tego co widziałem to na Kohanaphp zna się bardzo dobrze :] Ten post edytował terabit 11.08.2008, 23:19:20 -------------------- |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
oj, już nie wypominaj mi wieku ;P, poza tym w necie jesteśmy zwykle na "ty"
![]() przykład nr 1 jest u mnie widokiem sterowanym przez kontroler przykład nr 2: tak, zgadzam się z przedmówcami ![]() a tak w ogóle to bardziej pytasz o teorię niż Kohanę, a ja z teorii to lewy jestem ![]() ps. wróciłem z urlopu - dlatego tyle nie pisałem ![]() -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 16:12 |