Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Klasa produkt, dobrze zaprojektowana?
smajster
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.04.2006

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


Do swojego sklepu staram się zaprojektować klasę produkt, ale nie do końca wiem czy dobrze się za to biorę (jest to moja pierwsza klasa), także jakbyście mi mogli powiedzieć czy dobrze kombinuje.

jej wstepny projekt:
  1. <?php
  2. class produkt
  3. {
  4. var $id = 0; //jak jest zero ozncza to ze klasa nie odpowiada konkretnemu produktowi
  5.  
  6. function __construct($id_produktu)
  7. {
  8. $this->id = $id_produktu;
  9. }
  10. function dodaj($grupa, $podgrupa, $producent, $nazwa, $parametr1, $parametr2, $cena, $cenahurt, $promocja, $ilosc, $opis, $zdjecie)
  11. {
  12. //dodaje produkt do bazy
  13. }
  14. function kod_produktu($grupa, $podgrupa)
  15. {
  16. //generuje unikalny kod produktu
  17. }
  18. function usun()
  19. {
  20. //usuwa produkt z bazy
  21. }
  22. function wyswietl($cecha)
  23. {
  24. //wyswietla konkretna ceche produktu, np. nazwe lub parametr
  25. }
  26. function edytuj($cecha, $wartosc)
  27. {
  28. //zmienia konkretna wartosc jednej z cech produktu
  29. }
  30. function wartosc($rabat, $rodzaj)
  31. {
  32. //oblicza wartosc produktu zaleznie od rodzaju ceny (hurt, detal, promocja) oraz rabatu
  33. }
  34.  
  35.  
  36.  
  37. }
  38. ?>

Mam watpliwości co do metody dodaj, bo jest ona trochę niespojna z resztą klasy, bo jako jedyna nie wymaga parametru( id produktu) bo jeszcze takiego poprostu nie posiada, także nie wiem czy powinnem ją umieszczać w tej klasie.
Zastanawiam się też jeszcze czy jeden argument to nie mało, ale zaden inny mi nie przychodzi na mysl.

Będe wdzieczny za wszelkie uwagi które pomogą mi nabrać doświadczenia w tworzeniu klas.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Jim
post
Post #2





Grupa: Zarejestrowani
Postów: 111
Pomógł: 0
Dołączył: 27.07.2005

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


nie jestem specem od obiektowości, ale w ostatnim projekcie użyłem schematu aktywnego rekordu. Czyli w twoim przypadku to by wyglądało tak:
  1. <?php
  2. class product {
  3. public $id;
  4. public $title;
  5. public $description;
  6. public $price;
  7. public $count;
  8.  
  9.  
  10. /**
  11.    * konstruktor
  12.    * jeżeli podany jest parametr, pobierane sa dane z bazy danych
  13.    */
  14. public function __construct( $id = null ) { }
  15.  
  16.  
  17. /**
  18.    * pobieranie danych
  19.    * jeżeli podany jest $id, pobierane sa dane z bazy danych
  20.    */
  21. public function fetch( ) { }
  22.  
  23.  
  24. /**
  25.    * update
  26.    * jeżeli podany jest $id, następuje UPDATE bazy danych, jeśli nie to INSERT
  27.    */
  28. public function update( ) { }
  29.  
  30. /**
  31.    * delete
  32.    * jeżeli podany jest $id, rekord jest usuwany z bazy danych
  33.    */
  34. public function delete( ) { }
  35.  
  36. }
  37. ?>

to tyle w tej sprawie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)




W tym sposobie najlepsze jest to, że można utworzyć klasę abstakcyjną z metodami fetch(), update(), delete() po której będą dziedziczyły klasy product, user, category itd. Wtedy dopisywanie nowych modułów jest prostrze.

przykład klasy abstrakcyjnej
  1. <?php
  2. abstract class data {
  3.  
  4. /**
  5.    * funkcja która w zależności od parametru zwaraca nazwę klucza podstawowego, 
  6.    * lub nazwę tabeli na której dokonywane są operacje.
  7.    * jest to niezbędne dla metod korzystających z bazy danych, przecież muszą wiedzieć
  8.    * do jakiej tabeli wstawić dane.
  9.    */
  10. abstract function cfg($setting);
  11.  
  12. function update() { }
  13. function delete() { }
  14.  
  15. /**
  16.    * pobiera dane rekordu z bazy danych
  17.    */
  18. function fetch() { }
  19.  
  20. /**
  21.    * formatuje dane rekordu tak aby można było je wstawić do zapytania SQL
  22.    */
  23. function ListDataSql () { }
  24.  
  25. /**
  26.    * pobiera dane rekordu jako tablicę
  27.    */
  28. function ListDataArray() { }
  29. }
  30. ?>


wtedy klasa product (user, cokolwiek) wyglądałaby tak:
  1. <?php
  2. class product extends data{
  3. public $id;
  4. public $title;
  5. public $description;
  6. public $price;
  7. public $count;
  8.  
  9. public function __construct( $id = null ) { }
  10. public function cfg($setting) { }
  11.  
  12. /** 
  13.    * można dodać też metodę validate() do walidacji danych np pochodzących z formularza
  14.    */
  15. }
  16. ?>


jednak problem powstał, gdy trzeba było utworzyć bardziej skomlikowane relacje między rekordami (możliwe że jeszcze czegoś nie wiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )




zlinczujcie mnie jeśli głupoty gadam. (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Ten post edytował Jim 28.07.2006, 10:33:05
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: 7.10.2025 - 14:37