Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System plików - Jak go ubrać w klasy?, Problem z zależnościami pomiędzy klasami.
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Na potrzeby pewnego projektu, zacząłem pisać system uploadu, donwloadu plików oraz w tym samym systemie tworzenie katalogów i ich przeglądanie, usuwanie katalogów i plików oraz inne pomniejsze funkcje. Chodzi o to, że nie wiem jak to dobrze ubrać w klasy i jak sobie proadzić z zależnościami pomiędzy nimi.

Do tej pory powstało mi kilka różnych klas, przykładowo: Path, Upload, Download, File, MimeTypes itp. Ogólnie, do tej pory działałem na jednej klasie głównej, która w konstruktorze brała jako swój patrametr tablicę z nazwami, i odpowiednie klasy były tworzone pod pola głównej klasy. Zrobiłem tak, żeby nie marnować zasobów, po co mi 6 klas, skoro korzystam tylko z jednej?

Chcąc załadować nowa klasę, tworzę pole klasy głównej (FileSystem), i zapisuję nową instancje klasy do tego pola. W dalszej części sktyptu korzystam z nowej klasy, odnosząc się do odpowiedniego pola klasy głównej. Ale co zrobić, jak klasa Download będzie potrzebowała dostepu do metody lub właściwości klasy Path? W takim przypadku musiałbym tworzyć nowy obiekt (drugi) klasy Path by go wykorzystać w klasie Download - a drugi, bo pierwszy obiekt tej klasy został już utworzony w klasie głównej, i istnieje pod odpowiednim polem.

Teraz pytanie: Jak to wszystko zgrabnie ogarnąć? Jak utworzyć odpowiednie zależności pomiędzy klasami? Zrobić główna klase, lub każdą, stosując singleton (chciałbym tego uniknąć)? Proszę o jakieś sugestie, ewentualnie linki lub, jeśli ktoś miał z podobnym problemem do czynienia - jakies wskazówki, jak to rozwiązać.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Co robi twoja klasa Path? Jeśli jest to tylko zbiór funkcji pomocniczych używanych do operowania na ścieżkach w postaci stringów, to przerób ją na klasę statyczną. Natomiast jeśli klasa Path reprezentuje jedną konkretną ścieżkę, to obiekt tej klasy powinien być utworzony dla każdej ścieżki z osobna.
Nie patrz na programowanie obiektowe pod względem wydajności pamięciowej, bo skończysz z kodem proceduralnym opakowanym w śmieci typu "class". Szczególnie, że możesz mieć błędne pojęcie o tym, jak tak na prawdę obiekty klas przechowywane są w pamięci. Jeśli obawiasz się tworzenia wielu obiektów takiej klasy:
  1. <?php
  2.  
  3. class Path
  4. {
  5. //string
  6. private $path;
  7.  
  8. public function __construct( $path )
  9. {
  10. $this->path = $path;
  11. }
  12.  
  13. public function getFileName()
  14. {
  15. //...
  16. }
  17.  
  18. public function getFileExtension()
  19. {
  20. //...
  21. }
  22.  
  23. public function getDirectory()
  24. {
  25. //...
  26. }
  27.  
  28. public function getRoot()
  29. {
  30. //...
  31. }
  32.  
  33. public function isAbsolute()
  34. {
  35. //...
  36. }
  37.  
  38. // I jeszcze 50 takich metod, łącznie 500 linijek kodu!
  39. }

to powinieneś o tym poczytać.
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: 11.10.2025 - 10:00