Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MVC - klasy modelu - pojedyncze obiekty i listy
marcini82
post
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 1
Dołączył: 20.05.2005
Skąd: Poznań

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


Witam!

Pytanie dotyczy klas modelu w rozumieniu wzorca MVC, a ma zastosowanie chyba do prawie kazdego rodzaju danych przechowywanych w bazie. Otoz jesli mamy jakiekolwiek obiekty (uzytkownikow, ogloszenia, wiadomosci, itp.), to zazwyczaj istnieje potrzeba przeprowadzania operacji na pojedynczym obiekcie (dodanie, usuniecie, edycja itp.) oraz na grupie obiektow, spelniajacych okreslone kryteria (np. wyswietlenie listy uzytkownikow, ogloszen itp.). Jaka tworzycie tutaj strukture klas?
Czy robicie dwie klasy, z ktorych jedna reprezentuje pojedynczy obiekt a druga liste takich obiektow (np. Uzytkownik i ListaUzytkownikow)? A moze jedna klasa (np. Uzytkownik) posiada metody obslugujace obie mozliwosci, np. pobierz($id) dla pojedynczego obiektu i pobierzListe() dla calej listy obiektow? A moze jeszcze inaczej?

EDIT: Wlasciwie to ten temat powinienem dac do PHP > Programowanie obiektowe. Moze moderator zechcialby go przeniesc?

Ten post edytował marcini82 3.03.2007, 14:58:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Athlan
post
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Strzałek dobrze prawi imho... model users powinien obsługiwać metody takie jak findAll, get($mId, $bByName = false), setEmail(), setParams( jakies dane usera ) itp itd dotyczącego usera. Mogę zarzucić przykład z mojego modelu obsługującego filmiki w bazie danych (skomny, ale przedstawi działanie):

  1. <?php
  2.  
  3. class movies_Vmodel extends Vmodel
  4. {
  5. public function getLastModified($iTime)
  6. {
  7. $oDb = $this->getSource();
  8.  
  9. $oDb->setOrder("movie_time_edit ASC");
  10. $oDb->setWhere("movie_time_edit > " . (time() - $iTime));
  11.  
  12. $rResult = $oDb->dbSelect('movies', true, array('users' => 'movie_owner = user_id'));
  13.  
  14. $oDb->clear();
  15.  
  16. return $oDb->fetchAll($rResult);
  17. }
  18.  
  19. function getUserMovies($iUser)
  20. {
  21. $oDb = $this->getSource();
  22.  
  23. $oDb->setWhere("movie_owner = " . (int)$iUser);
  24.  
  25. $rResult = $oDb->dbSelect('movies', true);
  26.  
  27. $oDb->clear();
  28.  
  29. return $oDb->fetchAll($rResult);
  30. }
  31.  
  32. function setMovie($iUser, $sDescription, $sCode)
  33. {
  34. $oDb = $this->getSource();
  35.  
  36. $oDb->movie_owner = $iUser;
  37. $oDb->movie_text = $sDescription;
  38. $oDb->movie_code = $sCode;
  39. $oDb->movie_time = time();
  40. $oDb->movie_time_edit = time();
  41.  
  42. $rResult = $oDb->dbInsert('movies');
  43.  
  44. if($rResult)
  45. $oDb->Execute("UPDATE users SET user_count_movies = user_count_movies + 1 WHERE user_id = " . $iUser);
  46.  
  47. $oDb->clear();
  48. }
  49.  
  50. function getMovie($iId)
  51. {
  52. $oDb = $this->getSource();
  53.  
  54. $oDb->setWhere("movie_id = " . (int)$iId);
  55.  
  56. $rResult = $oDb->dbSelect('movies', true, array('users' => 'movie_owner = user_id'));
  57.  
  58. $oDb->clear();
  59.  
  60. return $oDb->fetch(1, $rResult);
  61. }
  62.  
  63. function unMovie($iId, $aData)
  64. {
  65. $oDb = $this->getSource();
  66.  
  67. $oDb->setWhere("movie_id = " . (int)$iId);
  68.  
  69. $rResult = $oDb->dbDelete('movies');
  70.  
  71. $oDb->clear();
  72.  
  73. $oDb->Execute("UPDATE users SET user_count_movies = user_count_movies - 1 WHERE user_id = " . $aData['movie_owner']);
  74.  
  75. return $rResult;
  76. }
  77.  
  78. function setMovieDesc($iId, $sDesc)
  79. {
  80. $oDb = $this->getSource();
  81.  
  82. $oDb->setWhere("movie_id = " . (int)$iId);
  83. $oDb->movie_text = substr($sDesc, 0, 40);
  84. $oDb->movie_time_edit = time();
  85.  
  86. $rResult = $oDb->dbUpdate('movies');
  87.  
  88. $oDb->clear();
  89.  
  90. return $rResult;
  91. }
  92. }
  93.  
  94. ?>
Go to the top of the page
+Quote Post

Posty w temacie


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: 2.10.2025 - 22:04