Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa obiektu vs. klasa kolekcji obiektow
little-did-he-kn...
post 17.03.2008, 15:22:54
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 17.03.2008

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


Czesc.

Mam dylemat zwiazany z budowa klasy obiektow i jej klasy kolekcji.
Zalozmy, ze obiektami sa goscie (Guests)

Obecnie robie to tak:

1. Klasa pojedynczego obiektu
  1. <?php
  2. class Guest {
  3.  
  4. private $id;
  5. private $name;
  6. private $email;
  7. private $password;
  8. private $errors = array();
  9.  
  10. function __construct($id) {
  11. global $dbm;
  12.  
  13. if (is_array($id)) {
  14. $this->id=( !empty($id['ProfileId']) ? $id['ProfileId'] : 0 );
  15. $this->name=( !empty($id['Name']) ? $id['Name'] : $id['Email']);
  16. $this->email=$id['Email'];
  17. $this->password=md5($this->email.microtime());
  18. }  
  19. }
  20.  
  21. function validate() {
  22.  
  23. if ( !preg_match('/b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b/',strtoupper($this->email)) ) {
  24. $this->errors[] = "nieprawidlowy adres e-mail!";
  25. } 
  26.  
  27. return count($this->errors) == 0;
  28. }
  29.  
  30. function __toString() {
  31.  //..
  32. }
  33.  
  34. function getErrors() {
  35. return $this->errors;
  36. }
  37.  
  38.  
  39. function setId($id) {
  40. $this->id = $id;
  41. }
  42.  
  43. function getEmail() {
  44. return $this->email;
  45. }
  46.  
  47. function getPassword() {
  48. return $this->password;
  49. }
  50. }
  51. ?>


2. Klasa kolekcji obiektow:

  1. <?php
  2. class GuestList {
  3. private $aList = array();
  4.  
  5. function add(Guest $g) {
  6.  //...
  7. }
  8.  
  9. function delete(Guest $g) {
  10.  //...
  11. }
  12.  
  13. function getOne() {
  14.  
  15. }
  16.  
  17. function getById($id) {
  18.  
  19. }
  20.  
  21. function getAll() {
  22.  
  23. }
  24.  
  25.  
  26. }
  27. ?>



Teraz pytania:

1. Metoda walidujaca powinna byc w klasie Goscia czy klasie kolekcji Gosci czy nie ma to znaczenia?
2. Dodanie nowego goscia powinno zostac poprzedzone utworzeniem obiektu klasy kolekcji czy tez tak jak ponizej wywolane bez kreacji obiektu?
3. Przekazanie obiektu przez referencje "&" jest zawsze prawidlowym rozwiazaniem?

  1. <?php
  2. $aGuest = new Guest($arr);
  3.  
  4. if ( $aGuest->validate() ) {
  5. GuestList::add(&$aGuest);
  6. echo $aGuest ;
  7.  
  8. }
  9. ?>

4. Kasujac obiekt powinienem tworzyc instancje obiektu kolekcji i samego obiektu goscia jak ponizej, czy tez wywolac ja bezposrednio?:

  1. <?php
  2. $aGuestList = new GuestList();
  3. $aGuest = $aGuestList -> getOne($pId);
  4. $aGuestList->delete(&$aGuest);
  5. ?>


Z gory dziekuje za merytoryczne odpowiedzi!
Go to the top of the page
+Quote Post
Strzałek
post 17.03.2008, 16:09:50
Post #2





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Ja to widzę trochę inaczej.

Najpierw sprawdzamy co mamy. Walidujemy to i dopiero jak się wszystko zgadza to tworzymy obiekt Guest i przechowujemy w nim Jana Kowalskiego. Następnie chcemy stworzyć kolekcje gości:

  1. <?php
  2. $collection = new GuestsCollection();
  3.  
  4.  foreach($guests as $guest){
  5.  $collection -> add($guest);
  6.  }
  7.  
  8. $collection -> remove('Kowalski');
  9. ?>


Metodę remove można zaimplementować różnie, wg. potrzeb.


--------------------
Go to the top of the page
+Quote Post
Cezar708
post 17.03.2008, 16:24:35
Post #3





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Cytat(little-did-he-know @ 17.03.2008, 15:22:54 ) *
1. Metoda walidujaca powinna byc w klasie Goscia czy klasie kolekcji Gosci czy nie ma to znaczenia?
2. Dodanie nowego goscia powinno zostac poprzedzone utworzeniem obiektu klasy kolekcji czy tez tak jak ponizej wywolane bez kreacji obiektu?
3. Przekazanie obiektu przez referencje "&" jest zawsze prawidlowym rozwiazaniem?
4. Kasujac obiekt powinienem tworzyc instancje obiektu kolekcji i samego obiektu goscia jak ponizej, czy tez wywolac ja bezposrednio?:



ad 1. Uważam, że wszelkie metody walidujące powinny być w klasie Guest, ponieważ może przyjść w przyszłości ochota na stworzenie nowego obiektu typu Guest poza kolekcją, wtedy taką metodę już będziesz "miał pod ręką"

ad 2. Tu wedle uznania, ja osobieście nie tworzyłbym obiektu kolekcji, tylko odwoływałbym się dokładnie tak jak pokazałeś w przykładzie (przez metody statyczne)

ad 3. W PHP5 zawsze jest wszystko przekazane przez referencję, więc '&' jest niekonieczne i nie musisz tego używać. Jeśli chcesz pracować na kopi obiektu używaj odwrotnego operatora do '&', czyli clone

ad 4, Jak już masz kolekcję to lepiej użyć kolekcji i w niej zaimplementować fukcję kasującą, tam dobrze jest korzystać z unset()

Pozdrawiam

Ten post edytował Cezar708 17.03.2008, 16:25:35
Go to the top of the page
+Quote Post
Sedziwoj
post 17.03.2008, 21:40:44
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(Strzałek @ 17.03.2008, 16:09:50 ) *
Ja to widzę trochę inaczej.
Najpierw sprawdzamy co mamy. Walidujemy to i dopiero jak się wszystko zgadza to tworzymy obiekt Guest i przechowujemy w nim Jana Kowalskiego. Następnie chcemy stworzyć kolekcje gości:


Jeśli to co zapisałeś jest tak jak sądzisz, to masz z teka dziwne podejście (powiedział bym że utrudniające życie), bo to obiekt Guest powinien weryfikować to co mu się daje, zazwyczaj jest jakaś filtracja danych z formularzy, ale to też nie powinno być nic specjalnego.
Kapsułkować kod potrzebny do wykonania pewnych rzeczy, czyli po co ma to robić i wiedzieć co ma robić coś poza obiektem Guest?

(o widzę że Cezar708 to też napisał biggrin.gif)

Co do kolekcji, to wszystko czego używamy ma czemuś służyć, nikt nie wynajmuje autobusu, aby gdzieś pojechać kawałek, tylko zadzwoni po taksówkę. Więc nie ma co tworzyć kolekcji dla jednego obiektu.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
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.05.2025 - 07:11