Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Prosta strona w OOP, klasa albums i proste obiekty..
fannet
post 7.07.2011, 21:39:41
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 28.11.2005

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


Witam serdecznie wszystkich.. zastanawiam się czy dobrze to wszystko rozumiem. Stworzyłem już standardowo (psełdo)klasę Albums na potrzeby strony z stosunkowo prostą bazą danych z albumami różnych wykonawców. Czy jest to zrobione dobrze w jak dużym stopniu przypomina to programowanie obiektowe. Problem w tym, że moje 3 pozostałe klasy (Artists, Songs, Categories) wyglądałby niemal identycznie tylko inne właściwości i nazwy.

  1. class Albums {
  2.  
  3. private $id; // id Albumu w bazie danych
  4. private $name; // nazwa albumu
  5. private $jear; // rok wydania
  6. private $artist; // artysta
  7. private $category; // gatunek
  8.  
  9. public function __construct() {
  10. // ustanawiam polaczenie z baza danych
  11. // wykorzstuje $this->db = new MySQLi..
  12. }
  13.  
  14. // funkcje dostepowe
  15. public function getId() { return $this->id; }
  16. public function getName() { return $this->name; }
  17. public function getJear() { return $this->jear; }
  18. public function getArtist() { return $this->artist; }
  19. public function getCategory() { return $this->category; }
  20.  
  21. // funckje dostepowe - ciag dalszy
  22. public function setId($id) { $this->id = $id; }
  23. public function setName($name) { $this->name = $name; }
  24. public function setJear($jear) { $this->jear = $jear; }
  25. public function setArtist($artist) { $this->artist = $artist; }
  26. public function setCategory($category) { $this->category = $category; }
  27.  
  28. public function create() {
  29. $query = "INSERT INTO...";
  30. $this->db->query($query);
  31.  
  32. while($row = $query->fetch_object()) {
  33. $this->setName($row->name);
  34. $this->setJear($row->jear);
  35. // i tak dalej
  36. }
  37. }
  38.  
  39. public function select() {
  40. $query = "SELECT album... WHERE id == {$this->getId()}";
  41. $this->db->query($query);
  42. }
  43.  
  44. public function update($field, $value) {
  45. $query = "UPDATE album SET $field = $value WHERE id == {$this->getId()}";
  46. $this->db->query($query);
  47. }
  48.  
  49. public function delete() {
  50. // w taki sam sposób kasuje
  51. }
  52. }
  53.  
  54. // przykładowa strona wyswietlajaca szczegółowe dane na temat albumu
  55. $album = Albums; // nowy album
  56. $album->setId(4); // ustawiam id 4
  57. $album->selsect(); // ustawiam album
  58.  
  59. // tworzac album
  60. $album = new Albums;
  61. $album->setName($_POST['name']);
  62. $album->setJear($_POST['jear']);
  63. $album->create();
  64.  
  65. // edytując album
  66. $album = new Albums;
  67. $album->setId(4);
  68. $album->selsect();
  69. if($_POST['name'] != $album->getName()) { $album->update('name',$_POST['name']); }
Go to the top of the page
+Quote Post
drozdii07
post 7.07.2011, 22:28:42
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 39
Dołączył: 6.12.2010
Skąd: localhost

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


Sprawdz zapytania, masz tam bledy. I to nie szczesne jear..Co ty miales z ang w szkole ?


--------------------
Wspieram akcję "jQuery i AJAX to nie język programowania"
Go to the top of the page
+Quote Post
Crozin
post 8.07.2011, 05:28:02
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Tutaj masz klasy Album, Artysta, Piosenka, a nie ich kolekcje więc używaj liczby pojedynczej w ich nazwach.
2. Każdy obiekt zajmuje się wyłącznie jednym zadaniem. Dlatego też powinieneś rozdzielić reprezentowanie danych i ich zapisywanie w bazie danych do dwóch różnych obiektów, Album (getTitle, getCategory, setArtist, ...) oraz AlbumManager (saveAlbum, deleteAlbum). W sumie pobieranie ich z bazy danych to również zadanie dla innego obiektu, powiedzmy AlbumRepository.
3. Ułatw sobie życie i korzystaj z type hintingu.
Go to the top of the page
+Quote Post
Psajkus
post 8.07.2011, 07:27:29
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 5
Dołączył: 26.06.2011

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


Cytat(Crozin @ 8.07.2011, 06:28:02 ) *
... oraz AlbumManager (saveAlbum, deleteAlbum). W sumie pobieranie ich z bazy danych to również zadanie dla innego obiektu, powiedzmy AlbumRepository.


Myślę, że samo repozytorium wystarczy.Repozytorium zawiera przede wszystkim operacje CRUD (Create, Read, Update, Deleted) oraz wszystkie inne operacje selekcji (np. GetById lub GetByQuery )

Ten post edytował Psajkus 8.07.2011, 07:28:41
Go to the top of the page
+Quote Post
gac3k
post 8.07.2011, 10:04:06
Post #5





Grupa: Zarejestrowani
Postów: 90
Pomógł: 8
Dołączył: 28.07.2009

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


A ja zamiast tworzyć 50 metod typu setId itd. zrobiłbym dwie magiczne metody __set i __get i tak to obsłużył.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:33