Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]podział na klasy
perhydrol
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

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


Witam,

od jakiegoś czasu eksperymentuję z obiektowym PHP, jednak moje strukturalne myślenie skutecznie mi to utrudnia.
Tylko proszę nie odsyłajcie do przeszukiwania tematów jak wielokrotnie twierdzicie iż temat był poruszany tysiące razy,
ja jednak szukając odpowiedzi w postach już istniejących na tym forum nie znalazłem satysfakcjonującej odpowiedzi.

Mam prośbę, czy mógł by ktoś mi wypisać na przykładzie sklepu internetowego podział na klasy, oraz zakwalifikować je do odpowiednich części:
Model, View, Controller

Coś w stylu listingu klas, i nie jest to z mojej strony wyręczanie się Wami, a jedynie chciał bym dostrzec jak szczegółowo należy podejść do podziału danej dziedziny sklepu internetowego na klasy. Dzięki przypisaniu ich do odpowiednich części MVC, myślę że będę mógł szybciej i lepiej zrozumieć to z czym się borykam. Dodam może że do UML-a używam "NetBeans IDE 6.7.1"

a interesujące mnie rozwiązanie to coś w stylu:

  1. class DB_Connect // klasa inicjująca połączenie z baza danych
  2. class DB_View // klasa zapytań do bazy danych
  3. .... // tu kolejne pytanie czy jest sens przechowywać wszystkie zapytania do bazy danych, np SELECT ... w jednym pliku?
  4. .... // no i jeszcze jak by mógł mi ktoś zaznaczyć która klasa do jakiej części modelu MVC się zalicza


Ten post edytował nospor 14.10.2009, 23:08:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jmail
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

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


no dr4ko wreszcie się z czymś zgadzamy (IMG:style_emoticons/default/biggrin.gif) potwierdż rejestrację i inne duperele powinny być nie w senderze tylko w kontrolerze rejestracji na przykład.

tak samo jak notacja wielbłądzia (IMG:style_emoticons/default/tongue.gif) ja bym to jeszcze przemieszał z notacją węgierską dla pełni szczęścia.

czyli dla przykładu

intJakasZmienna - zawsze wiemy jaki typ reprezentuje

perhydrol nie wiem czy zauważyłeś ale constructor chyba z podwójnym podkreśleniem powinien być zanotowany (IMG:style_emoticons/default/winksmiley.jpg)

jeżeli ja miałbym to rozdzielać (IMG:style_emoticons/default/winksmiley.jpg) to bym to zrobił tak (na przykładzie Twojej klasy zamówienie)

  1.  
  2. <?php
  3.  
  4. class Zamowienia_kontroler{
  5. function __constructor()
  6. {..........}
  7. function dodajZamowienieDoBazyDanych() //---a może ta metoda powinna być w klasie kontroler (IMG:style_emoticons/default/questionmark.gif)
  8. {..........}
  9. function dodajPunktyRabatuUzytkownikowi()
  10. {..........}
  11. function odejmijPunktyRabatuUzytkownikowi()
  12. {..........}
  13. function zmienStatusZamowienia() //---jeśli DotPay potwierdził
  14. {..........}
  15. function przygotujListeZamowienUzytkownika($intId /*zakładam, że loosera podajesz przez jego id*/)
  16. {
  17. /*zakładam, że klasa globalna wykonywania zapytań na bazie danych jest utworzona i że wiesz co chcesz tutaj zrobić
  18.  
  19.   Właśnie taka budowa - w mojej opinii sprawia, że model nie ma pojęcia o kontrolerze i o widoku. poproszony jest o konkretne dane (wywołane są odpowiednie jego funkcjonalności)
  20.  
  21.   */
  22. $klasaBazy->parseQuery($parametry, $znacznikQuery); /* bez względu na to co jest pod spodem do model ma wiedzieć jak sparsować takie query - ty masz do środka przekazać parametry i znacznik które query cię interesuje */
  23. $klasaBazy->executeQuery($znacznikQuery); //przykładowa nazwa - tu każesz modelowi pobrać te dane.
  24. $wyniki = $klasaBazy->grabData(); //tutaj zasysam dane - i je chwytasz
  25. /*
  26.  
  27.   tu następuje ich przetworzenie - robisz na nich to co potrzebujesz co w ostateczności ustawia nam jakąś $tablica
  28.  
  29.   */
  30. $this->przygotujDlaWidoku($tablica, 'template_jaki_ma_byc_parsowany');
  31. }
  32. function przygotujSzczegolyZamowienUzytkownika()
  33. {..........}
  34. function przygotujListeZamowienWszystkich() //---w PA
  35. {..........}
  36. function przygotujSzczegolyWybraneZamowienie() //---w PA nie wiem czy to jest w ogóle potrzebne - czy to nie dubluje funki ze szczegółami zamówień użytkownika?
  37. {..........}
  38. function przygotujDlaWidoku($parse, $template){
  39. $widok = new globalnaKlasaWidoku($template);
  40. $widok->assignVars($parse);
  41. $widok->view->display();
  42. }
  43. }
  44.  
  45. class globalnaKlasaWidoku{ /* dlaczego globalna? ponieważ uważam, że Widok również nie powinien być świadomy kontrolera. On daje funkcjonalności, które pozwalają wyświetlić dane w sposób jaki tego oczekujemy, ale tworzenie widoku dla każdej klasy jest zbędne moim zdaniem. Jak już mówiłem wcześniej - cała logika dzieje się w kontrolerze, model dostarcza danych, widok je wyświetla, a kontroler musi to powiązać ze sobą */
  46. $this->module = '';
  47. public function __constructor($module){
  48. $view = new Smarty(); //zakładam wykorzystanie Smartów i funkcji __autoload
  49. $this->module = $module;
  50. }
  51.  
  52. public function assignVars(&$parse){
  53. foreach($parse as key => $value){
  54. $this->view->assign($key, $value);
  55. }
  56. }
  57. }
  58.  
  59. ?>
  60.  
  61.  



thek -> widzę, ze się całkowicie rozmijamy ze zrozumieniem.

Mnie chodzi o to, że dla mnie baza danych to nie jest konkretny silnik bazodanowy. to nie jest MySQL Postgre XML CSV FB IB SQL Server ORACLE czy bóg wie jeszcze co.

Pokazałem w przykładzie powyżej.

Ja chcę wywołać parseQuery z parametrami i wskazaniem które dane mnie interesują - bez względu na to czy to jest XML, baza danych (w sensie silnika), czy to jest kij wie co.

Na przykład zapisałem sobie w XML'u swoje zapytania do bazy danych (podkreślam ponownie to jest przykład! nie chodzi mi o konkretny silnik bazy danych)

załóżmy

  1. <query id="1">
  2. select * from {param1} where {param2} = {param3}
  3. <query>


teraz chcę to wywołać w kontrolerze

  1.  
  2. $params[1] = 'prametr1';
  3. $params[2] = 'prametr2';
  4. $params[3] = 'prametr3';
  5. $klasaBazy->parseQuery($params, 1); // sparsuj zapytanie 1 (gowno mnie obchodzi czy dla pliku XML czy dla silnika bazy danych czy dla pliku tekstowego - to już ma wiedzieć model z czego korzysta), używając tablicy params
  6. $klasaBazy->executeQuery(); //wykonaj to sparsowane zapytanie - znowu mnie nie obchodzi czy na Oracle'u czy na liczydle
  7. $wynik = $klasaBazy->grabData(); //chcę dostać wyniki niezależne od silnika bazodanowego - chcę dostać prostą tablicę asocjacyjną klucz - wartosc
  8.  


i teraz sobie mogę na tym wyczyniać co mi się żywnie podoba

Co do na przykład wysyłki. Ja osobiście uważam, że to kontroler musi wiedzieć jakie opcje wysyłki mam możliwe. założmy:

1. GG
2. mail
3. twitter

user przekazuje do kontrolera 4 to co on ma to bez sprawdzenia do modelu przekazać? oczywiście że nie chodzi mi o to, żeby on wykonał mail(). Chodzi mi o to, żeby on wywołał wyslij(typ wysyłki, dane_z_formularza). Ale też musi wiedzieć czy typ wysyłki jest obsługiwany - dzięki temu od razu zwraca userowi błąd


Hmmmmmmm. jak na to wszystko patrzę to chyba chodzi nam o to samo ale inaczej nazywamy (IMG:style_emoticons/default/biggrin.gif) funkcjonalności (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował jmail 16.10.2009, 00:29:18
Go to the top of the page
+Quote Post

Posty w temacie
- perhydrol   [PHP]podział na klasy   13.10.2009, 14:43:03
- - thek   MVC robią dokładnie to co sugeruje nazwa. Różnica ...   13.10.2009, 15:10:22
- - perhydrol   dzięki wielkie "thek" za zrozumiały opis...   14.10.2009, 21:12:17
- - jmail   hmmmmm. zdaje mi się czy pomyliliśmy pojęcia MVC? ...   14.10.2009, 21:22:04
- - perhydrol   wiec tak dla sprostowania, pojęć nie pomyliłem, mo...   14.10.2009, 22:52:33
- - thek   Zauważ, że przykładową klasą Użytkownik mieszasz j...   15.10.2009, 08:24:26
- - jmail   Cytat(thek @ 15.10.2009, 09:24:26 ) Z...   15.10.2009, 11:53:12
|- - dr4ko   Cytat(jmail @ 15.10.2009, 12:53:12 ) ...   15.10.2009, 14:55:42
- - fenix.robi   Ja proponuje skorzystać z fameworka CAKE'a, kt...   15.10.2009, 14:25:54
- - thek   To może jmail wyjaśnię dlaczego podałem taki a nie...   15.10.2009, 14:27:19
- - jmail   nie no to są dwie zupełnie różne rzeczy. Jeżeli ...   15.10.2009, 14:55:11
- - jmail   dr4ko czekaj czekaj. czy to nie jest tak, że model...   15.10.2009, 15:03:40
|- - dr4ko   Cytat(jmail @ 15.10.2009, 16:03:40 ) ...   15.10.2009, 15:18:10
- - jmail   no i właśnie o to chodzi. model jest tylko zbiorem...   15.10.2009, 15:24:37
- - dr4ko   Logika biznesowa powinna być zawarta w modelu, a k...   15.10.2009, 15:50:59
- - jmail   to jest Twoja opinia. moja jest taka, że jeżeli wp...   15.10.2009, 16:01:21
|- - phpion   Cytat(jmail @ 15.10.2009, 17:01:21 ) ...   16.10.2009, 12:11:49
- - dr4ko   Ok, ja się poddaję, nauczyciel ze mnie kiepski. Al...   15.10.2009, 16:23:39
- - thek   Dr4co ma IHMO rację. Przyłącze się do przykładu z ...   15.10.2009, 16:28:05
- - jmail   ale chwilę. To co dałeś to jest modyfikacja pure M...   15.10.2009, 16:29:36
- - dr4ko   Bzdura. To co podałem to jest najczystsze MVC jaki...   15.10.2009, 16:41:26
- - jmail   to jak chcesz zrobić logikę biznesową bez bazy dan...   15.10.2009, 16:54:35
- - dr4ko   A gdybym chciał zrobić aplikację obliczeniową? Np ...   15.10.2009, 18:10:32
- - jmail   no to teraz sam sobie zaprzeczasz. kalkulator albo...   15.10.2009, 18:13:04
|- - dr4ko   Cytat(jmail @ 15.10.2009, 19:13:04 ) ...   15.10.2009, 21:13:01
- - thek   jmail... my mówimy teraz o braku danych czy braku ...   15.10.2009, 20:24:18
- - perhydrol   Panowie, czytam wasze wypowiedzi i osobiście każdą...   15.10.2009, 21:51:04
- - dr4ko   Spoko, chodzi przecież o to żebyś zrozumiał. Jest ...   15.10.2009, 22:27:26
- - perhydrol   właśnie się zastanawiałem czy rozbijać MailSender_...   15.10.2009, 23:00:22
- - jmail   no dr4ko wreszcie się z czymś zgadzamy potwierdż...   16.10.2009, 00:12:59
- - thek   Dla mnie termin baza danych jest jednoznaczny i st...   16.10.2009, 11:01:45
- - dr4ko   Idealną sytuacją by było gdyby ani kontroler ani m...   16.10.2009, 12:04:50


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: 16.10.2025 - 20:49