Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GenericObject- klasa po której dziedziczą typowe klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
Capellini
Czy Waszym zdaniem jest sens tworzyć klasę abstrakcyjną GenericObject? Klasę tą dziedziczyłyby wszystkie typowe klasy i miałaby ona służyć do wykonywania operacji często powtarzanych w typowych klasach, takich jak: tworzenie, wczytywanie, aktualizowanie, usuwanie rekordów z bazy danych.

Jeżeli jest sens, to proszę jeszcze o odpowiedź na pytanie, jak ta klasa u Was by wyglądała?

Moja klasa GenericObject posiadałaby następujące pola i metody:

[PHP] pobierz, plaintext
  1. abstract class GenericObject
  2. {
  3. private $id; // id w bazie danych przechowywanego obiektu
  4. private $loaded; // wczytane dane
  5. private $data; // dane zmienione
  6. private $modified; // tablica booleanów przechowujących infomację o tym, czy dane pole zostało zmienione
  7. static private $tableName; // nazwa tabeli, w której są przechowywane rekordy tej klasy
  8. final protected function toCollection($result);
  9. /* powyższa metoda na podstawie wyniku zwracanego przez mysql_query("SELECT ... "); zwraca kolekcję obiektów klasy dziedziczącej po GenericClass */
  10. protected function load(); // wczytuje dane z bazy danych
  11. protected function delete(); // usuwa dane z bazy danych
  12. // powyzsze funkcje sa protected zeby uzytkownik klasy mogl je modyfikowac
  13. protected function setFields(); // jezeli uzytkownik klasy sam nie zdefiniowal metod load i delete, to potrzebne sa pola w tej tabeli
  14. final public function __construct($id = 0); // jezeli bez argumentu, to tworzy nowy obiekt, a jezeli z argumentem, to wczytuje obiekt o podanym id
  15. final public function get($field); // zwraca wartosc pola $field
  16. final public function set($field, $value); // ustwia wartosc pola
  17. final public function fromArray($array); // zapisuje odpowiednie wartosci na podstawie tablicy, dzieki temu mozna napisac obiekt->fromArray($_POST)
  18. static public function createTable(); // tworzy tabele w bazie danych dla klasy
  19. static public function setTableName($tableName); // ustawia zmienną $tableName
  20. public function isValid($field, $value); // sprawdza poprawność
  21. public function save(); // zapisuje dane w bazie danych
  22. public function forceLoaded(); // ustawia loaded na true
  23. }
[PHP] pobierz, plaintext

P.S. Możliwe, że mój powyższy kod zawiera jakieś błędy, albo czegoś nie przewidziałem, proszę wtedy o uprzejme opisanie, co robię nie tak.
bigZbig
Rozwiązanie to jest powszechnie stosowane we wszelkiego rodzaju ORM-ach czy abstrakcjach baz danych. Wygląd clasy abstrakcyjnej zależy od tego jakie narzędzie lub funkcjonalność chcesz przy jej pomocy osiągnąć. Czy to ma być coś ala Active Record czy DAO? Nazwa GenericObject jest moim zdaniem zbyt ogólna. Czy ta klasa ma być podstawą wszelkich twoich klas czy tylko klas związanych z BD?
Capellini
Wielkie dzięki za odpowiedź.

Cytat
Czy to ma być coś ala Active Record czy DAO?

Raczej ActiveRecord, ale ktoś kto pisałby klasę dziedzicząca po GenericObject tworzyłby metody statyczne takie jak są w DAO.

Cytat
Czy ta klasa ma być podstawą wszelkich twoich klas czy tylko klas związanych z BD?

Tylko związanych z BD.

Jak wyglądałaby taka klasa, gdybyś ty ją projektował?
NuLL
Cytat
P.S. Możliwe, że mój powyższy kod zawiera jakieś błędy, albo czegoś nie przewidziałem, proszę wtedy o uprzejme opisanie, co robię nie tak.

Akurat mowisz chyba o autorach ksiazki co ? snitch.gif
Capellini
@NuLL, jeżeli dobrze Cię zrozumiałem, to odpowiedź na Twój post brzmi:

Samą ideę tworzenia takiej klasy poznałem w książce, ale tamten kod, który tutaj wkleiłem to jest mój kod. Na podstawie tego, co przeczytałem w książce postanowiłem stworzyć własną wersję tej klasy by była dostosowana do moich potrzeb. Jeżeli masz tę książkę, to zajrzyj do niej, a zobaczysz, że moja wersja znacząco się różni od tej z książki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.