Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zwracanie wartości przez model
janusz.master
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Mam sobie dwie klasy: userData - zawiera dane uzytkownika, oraz userBase - wszelkie operacje na bazie danych zwiazane z uzytkownikiem. I mam pytanie: co powinna zwracać funkcja klasy userBase, pobierania uzytkownika z bazy?questionmark.gif Powinna zwracać tablicę z danymi czy lepiej byłoby aby zwracała obiekt klasy userData - uzytkownika??

Mam taki kod:

  1. <?php
  2. class userData extends zasob{
  3.  
  4. }
  5.  
  6. class userBase extends model{
  7. public function add(userData $user)
  8. {
  9. $this->db->insert($this->ust['table'], $user->getDataAssoc());
  10. }
  11. public function update(userData $user)
  12. {
  13. $this->db->setWhere(array('login'=>$user->login));
  14. $this->db->update($this->ust['table']);
  15. }
  16. public function delete(userData $user)
  17. {
  18. $this->db->setWhere(array('login'=>$user->login));
  19. $this->db->delete($this->ust['table']);
  20. }
  21. public function getByLogin(userData $user) // pobiera 1 uzytkownika na podstawie loginu
  22. {
  23. $this->db->setWhere(array('login'=>$user->login));
  24. $result = $this->db->select($this->ust['table'], array('*'));
  25. $user = new userData;
  26. $user->fetch($result);
  27. return $user;
  28. }
  29. public function getUsers(userData $user) // pobiera uzytkownikow na podstawie wzorca
  30. {
  31. $this->db->setWhere($user->getDataAssoc());
  32. $result = $this->db->select($this->ust['table'], array('*'));
  33.  
  34. $users = '';
  35. foreach ($result as $user)
  36. {
  37. $user = new userData;
  38. $user->fetch($result);
  39. $users[] = $user;
  40. }
  41. return $users;
  42. }
  43. }
  44. ?>


No i jak widać przy pobieraniu z bazy przy każdego rodzaju zasobie muszę tworzyć w funkcji nowy obiekt (obiekty) i zapisywać do nich informacje z bazy. Sposób z przekazywaniem tablicy wydaje się być dużo prostszy i mniejszy objętościowo dlatego pytam jak wy to robicie i jakie są tego zalety/wady.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Zdecydowanie obiekt. Jest to logiczne, że klasa zarządzająca tymi obiektami wypełnia je w jakiś sposób i zwraca ich kolekcję. Po co Ci tablica z danymi? W każdym poleceniu i tak musiałbyś przepisywać tablice na obiekt, więc tak, jak jest teraz - jest dobrze. Jedynie metoda userBase::getUsers() powinna zostać rozbita na dwie metody.

1. userBase::loadUsers() - Odpowiada za pobranie danych z bazy i umieszczenie obiektów w kolekcji
2. userBase::getUsers() - zwraca jedynie utworzoną kolekcję, a w przypadku jej braku wywołuje userBase::loadUsers()

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
janusz.master
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Cytat(Cysiaczek @ 27.01.2008, 12:42:41 ) *
2. userBase::getUsers() - zwraca jedynie utworzoną kolekcję, a w przypadku jej braku wywołuje userBase::loadUsers()


Nie za bardzo rozumiem - getUsers uruchamia loadUsers a gdy ta nie zwroci nic to znow ja wywoluje?? Nie kumam

Przez to co powiedziałeś, zrozumiałem ze ma to wygladac mniej wiecej tak:

  1. <?php
  2. class userBase extends model{
  3. protected $users = array();
  4.  
  5. // .....
  6.  
  7. protected function loadUsers(userData $user)
  8. {
  9. $this->db->setWhere($user->getDataAssoc());
  10. $result = $this->db->select($this->ust['table'], array('*'));
  11.  
  12. $users = '';
  13. foreach ($result as $user)
  14. {
  15. $user = new userData;
  16. $user->fetch($result);
  17. $users[] = $user;
  18. }
  19. $this->users = $users;
  20. return $users;
  21. }
  22.  
  23. public function getUsers(userData $user)
  24. {
  25. if($this->users) return $this->users;
  26. return $this->loadUsers($user);
  27. }
  28. }
  29. ?>

Dobrze mysle??
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Tak, właśnie coś takiego smile.gif

Pozdrawiam


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 02:43