Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP]Gdzie przechowywać dużo danych
Forum PHP.pl > Forum > PHP > Object-oriented programming
PawelC
Hej smile.gif
Mam mały problem, piszę sobie w OOP klasę do generowanie profili użytkowników, i imiona będą przechowywane w tablicy. A moje pytanie dotyczy tego gdzie lepiej trzymać te dane w osobnym pliku i z niego losować czy zdecydowanie w klasie. Wizualnie kod na chwile obecną przedstawia się tak:
  1. <?php
  2.  
  3.  
  4. class Profile
  5. {
  6. public function getName()
  7. {
  8. $name=array('Magda','Paweł','Marcin','Iza');
  9. shuffle($name);
  10. return $name[0];
  11. }
  12. }
  13. $profil=new Profile;
  14. echo $profil->getName();
  15.  
  16. ?>

Na chwile obecną są podane tylko 4 imiona, ale w rzeczywistości będą wszystkie męskie i żeńskie.
kfc4
Najlepiej w bazie, z powodu łatwości przetwarzania.
laohost
Nie lepiej w bazie i losować przez ORDER BY RAND()?
grn
Chcesz stworzyć klasę do generowania profili testowych? Jeśli tak, to sugerowałbym stworzenie:
  • klasy ProfileGenerator, której metoda ProfileGenerator::generate() zwracałaby wygenerowany profil,
  • klasy RandomSelector, która zwracałaby losowo wybrany ciąg przekazany jej wcześniej,
  • klasa ProfileGenerator miałaby atrybut $nameGenerator, który zwracałby losowo wybrane imię. W tej roli miałbyś klasę RandomSelector.

Użycie wyglądałoby mniej więcej tak:
  1. // Argumentem konstruktora jest generator imion
  2. $profileGenerator = new ProfileGenerator(
  3. new RandomSelector(require('names.php'))
  4. );
  5. $profile = $profileGenerator->generate();

W pliku names.php:
  1. return array(
  2. // Tablica imion
  3. );

Oczywiście nic nie stoi na przeszkodzie, aby stworzyć klasy pochodne od RandomSelector, np. RandomDatabaseSelector itp. Należałoby popracować nad nazewnictwem klas i metod, ale sądzę, że taki kierunek byłby dobry.

Co zyskujesz w ten sposób:
  • możesz łatwo użyć kodu ponownie,
  • możesz łatwo modyfikować jego działanie,
  • możesz łatwo testować każdą jego część jak i całość.
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.