Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MVC pytanie o model
Forum PHP.pl > Forum > PHP
AxZx
witam

jesli dobrze rozumiem idee MVC to model to jest klasa z metodami ktore powinny wyrzucac jakies dane, np pobranze z bazy, albo zapisywac dane w bazie.

w ktorej czesci aplikacji napisanej zgodnie z MVC powinienem zrobic stronicowanie?
stworzyc metode w modelu do ktorej podam LIMIT do zapytania SQL?

np model artykul
metody: dodaj, pobierz_jeden, pobierz_wszystkie, pobierz_limit ?

bo reszte np sprawdzenie na ktorej podstronie jest user robi kontroler?
marast78
Pod pojęciem MVC rozumiem wzorzec projektowy choć można to też nazwać podejściem do tworzenia aplikacji internetowych w architekturze wielowarstowej a te warstwy są 3 Model czyli warstwa logiki, (pobieranie danych z bazy, metody, baza danych, pliki itp.), View czyli widok najczęściej tutaj korzysta się ze Smarty(szablonów) korzystając z HTML bądź XHTML i ostatnia warstwa Control czyli kontroli, która steruje wykonywaniem wywoływanych akcji. Model może być klasą lub zbiorem klas, najlepiej wykorzystać w twoim przypadku Model DAO - wlaściwie to o tym piszesz może jedynie nie wiesz i tak na przykład w swojej klasie nazwijmy ja Model_article masz akcje/metode 'dodaj' powiedzmy że akcja ta jest wywoływana przez zmienną get wtedy najlepiej ustalić sobie czy akcje będę odpowiadały numerom, a może określonym nazwom lub będą identyczne z nazwami metod (to model DAO), wówczas wywołujesz adresem (to tylko przykład)

tą akcję a tak naprawdę wówczas wywołujesz/inicjujesz tą metodę, możesz również sterować tymi akcjami korzystając ze switch naprzykład mamy adres

a w kontrolerze kod (fragment odpowiedzialny za sterowanie)

  1. <?php
  2. switch($_GET['akcja'])
  3. {
  4. 1: metoda1() ...;
  5. 2: metoda2() ...;
  6. ...
  7. }
  8. ?>


to tak po krótce może ci rozjaśni
AxZx
raczej nie o to mi chodzilo,

pytania byly jednoznaczne

w ktorej czesci aplikacji napisanej zgodnie z MVC powinienem zrobic stronicowanie?
stworzyc metode w modelu do ktorej podam LIMIT do zapytania SQL?
marast78
chyba nie czytałeś tego co napisałem.. rozumiem, że pod pojęciem stronicowania rozumiesz kolejne wyświetlanie i pobieranie danych z bazy więc sam pomyśl, że przycisk 'następny' i 'poprzedni' itp. będzie w Widoku, pobieranie z bazy w Modelu kliknięcie na przyciski będzie powodowało wywoływanie danego polecenia na przykład będzie podawało o ile ma zostać wykonany offset tu zadziała Controller czyli wartość wg której można wyliczyć wartości od, do dla LIMIT w zapytaniu, możesz tez napisać swój komponent uniwersalny stronicowania.
AxZx
okej dzieki:)
mniej wiecej zrozumialem
czyli musze utworzyc w modelu metode z parametrami $limit_start, $limit_end.

a w kontrolerze sprawdzam na ktorej podstronie jest user.

wszystko jasne:)

EDIT:
jednak nie wszystko tak do konca jasne

zalozmy ze chce skorzystac z 2 modeli
mam uzytkownika ktory jest kierowca,
wiec mam 2 modele: uzytkownik, kierowca (2 tabele w bazie).

mecze sie teraz nad metoda dodaj2 w kontrolerze kierowca bo chcialbym zastosowac transakcje

moge w kontrolerze zrobic cos takiego

start transakcji
uruchomienie metody dodaj modelu uzytkownik
uruchomienie metody dodaj modelu kierowca
zakonczenie transakcji

sprawdzenie wyniku transakcji
tak to bedzie wygladac?
Cysiaczek
Czy koniecznie musisz się trzymać wzorca MVC dosłownie? On tylko sugeruje podział na trzy podstawowe warstwy, ale przecież możesz podzielić na więcej. W swoim frame wyróżniam 4 warstwy (polecenia/widoku, kontroli, logiki i danych). Mam 2 podstawowe kontrolery - jeden steruje całą aplikacją - jej stanem i nadzoruje pracę drugiego kontrolera, który uruchamia logikę (akcje), mówiąc mu, czy i jak ma dalej działać.

Cytat
start transakcji
uruchomienie metody dodaj modelu uzytkownik
uruchomienie metody dodaj modelu kierowca
zakonczenie transakcji


U mnie byłoby to coś takiego.

2 akcje (dodaj użytkownika, dodaj kierowcę)
Akcja kompozyt składająca się z dwóch akcji uruchamianych przez kontroler (albo od razu przez akcję kompozytową)
Można sterować np. XML'em. (uproszczone)
  1. <akcjaKompozytowa>
  2.  <subactions>
  3.    <addUser />
  4.    <addDriver />
  5.  </subactions>
  6. </akcjaKompozytowa>

?action=akcjaKompozytowa

Zalety są takie, ze nie musisz dodawać kolejnych dziwnych metod to modelu, a jedynie wykorzystać istniejące modele i ich metody.

Pozdrawiam.
marast78
wszystko można w końcu nie wszystko jeszcze zostało tak naprawdę odkryte nawet w programowaniu hehe
ale tak na serio to wszystko zależy od tego jak sobie tego kontrolera rozwiążesz możesz obmyślić jakąś strategie (Strategy pattern) dla swojego rozwiązania to już tylko kwestia dobrania jakiegoś algorytmu, poza tym tabela szybciej może odpowiadać klasie, ale to już abstrakcja smile.gif a raczej hibernacja.. według mnie nie komplikuj sobie sprawy bo się zgubisz najprostsze rozwiązania okazują się najlepszymi, wielu programistów programując tworzy tak zagmatwany kod, że potem sami nie mogą się w nim połapać. Musiałbyś sobie poczytać o wzorcach projektowych takich jak Front Controller, Strategy i Factory Method one powinny rozwiązać twoje wątpliwości.
Poza tym zgadzam się z powyższym u siebie mam kontroler główny i rozszerzający, który oparty jest o AJAX, czyli łącze programowanie obiektowe ze zdarzeniowym coś jak C#php smile.gif
AxZx
wlasnie chcialem w ten sposob sobie ulatwic

czyli jeden widok z formularzem rejestracji uzytkownika (user_form.view)
drugi widok z formularzem rejestracji kierowcy (driver_form.view) i do niego wrzucam widok user_form.view
pozniej mam drugi rodzaj np sprzetaczka tworze widok cleaner_view.php i do niego tez wrzucam widok user_form.view

to chyba wlasnie jest uproszczenie? bo chcac zmienic albo dodac jakies pole do uzytkownika np pole z ID skype'a - dodaje to pole w jednym pliku user_form.view

tylko ze tak czy siak bedzie trzeba zmieniac funkcje w ktorej zapisuje dane z formularza.

musze poczytach o tych wzorcach:)

o MVC pisza roznie (a przynajmniej ja roznie rozumuje z opisow)

ten wzorzec chyba zostal po to stworzony zeby ulatwiac, zostal oparty na doswiadczeniach programistow.
Cysiaczek
To o czym mówisz przypomina implementację wzorca two-step-view.

Pozdrawiam.
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.