Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa doładowania plikówi katalogów
buliq
post
Post #1





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Witam serdecznie.

Projektując klasę do obsługi plików i katalogów( operacje typu wyszukiwanie, ładowanie, upload i tworzenie) przy kwestii wyszukiwania i ładowania plików natknąłem się na problem. Bardziej na zagadnienie z wieloma rozwiązaniami. Prosiłbym was o wskazanie rozwiązania, może ktoś już spotkał się z tymi pomysłami i wybrał właściwe.

Rozwiązanie 1: tworzymy strukturę katalogów i plików, zapisujemy do cache, w razie potrzeby wyszukujemy wśród tej struktury odpowiedniego pliku. Cache odświeżany raz dziennie oraz w przypadku uploadu/tworzenia plików/katalogów.

Rozwiązanie 2: przy pomocy glob tworzymy strukturę plików odpowiadającą wzorcowi (rozszerzenie i przeznaczenie pliku np. moduł, plugin).

Rozwiązanie 3: bezpośrednie wyszukiwanie wszystkich możliwych ścieżek do plików i sprawdzanie czy plik istnieje.

Najlepsze wydaje się rozwiązanie 1 jednak nie jest ono optymalne pod względem aktualności danych. Rozwiązanie 3 to za dużo możliwości do sprawdzenia i wymagana większa ilość parametrów-bardziej złożone nazwy zawierające nazwy podkatalogów. Rozwiązanie 2 opiera się na glob - nigdy nie wiadomo ile plików znajdzie czyli ilość możliwości zmienna - może być lepiej ale może być też gorzej (IMG:style_emoticons/default/wink.gif)

Ma ktoś jeszcze inne rozwiązania?

Wyjaśnienie działania: W kontrolerze aplikacji wydaję polecenie wczytania składowych systemu typu sterownik bazy danych, system szablonów, systemy poboczne (np File::load('db'), File::load('view')), lub wczytania kontrolera strony index (File::load('index')). Chcę uzyskać konkretny plik to w drugim parametrze podaję katalog (File::load('index','controller')) chcę wskazać precyzyjnie jaka paczka to trzeci parametr. Zawężając w ten sposób ilość wyników.

A może moje rozumowanie jest kompletnie złe? Nakierujcie mnie proszę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Ale kombinujesz.
Jeśli twój fw jest w pełni oparty na klasach to nie baw się w file::load tylko daj autoloader z PSR-0.
Go to the top of the page
+Quote Post
buliq
post
Post #3





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Użyłbym gdybym chciał tylko autoloadera, klasa File ma też tworzyć, edytować, konwertować, kasować, itp. Jednym słowem cała obsługa plików i katalogów. Ewentualnie autoloader z obiektu ale to dalej nie pomoże przy szukaniu itp.
Go to the top of the page
+Quote Post
Spawnm
post
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Jeśli chodzi o operacje na samych plikach i katalogach to jedyną sensowną opcją jest podawanie ścieżek.
Jak chcesz odróżnić db.php w Library od db.php w Application/Model podając tylko nazwę pliku?
Go to the top of the page
+Quote Post
Zyx
post
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


To jeszcze polecam Ci dorzucić do tej klasy opcję prasowania ubrań i robienia zakupów. Twoje rozwiązanie istotnie jest kompletnie złe. Jest w programowaniu obiektowym (z którym nawiasem mówiąc Twój pomysł niewiele ma wspólnego) tzw. Zasada jednej odpowiedzialności, która mówi, że obiekty (a za nimi klasy) powinny zajmować się jedną i DOKŁADNIE jedną rzeczą. Z punktu widzenia aplikacji ładowanie klas oraz zarządzanie strukturą katalogową to dwa różne problemy, zatem powinny się nimi zajmować dwie oddzielne jednostki.

Spawnm dobrze Ci pisze. Wymyślanie wianków na kiju odnośnie ładowania klas to kompletny bezsens. Jest jedna, uniwersalna i bardzo elastyczna konwencja PSR-0 i nie ma żadnych argumentów przeciwko jej używaniu. Za to jest cała masa pozytywów:
- bez problemu podłączysz dodatkowe, zewnętrzne biblioteki do projektu,
- możesz bardzo łatwo optymalizować proces ładowania klas dzięki temu, że jest on oddzielony od samej aplikacji,
- nie musisz wynajdować koła od nowa, bo istnieją do tego dobrze przetestowane, zoptymalizowane i sprawdzone w bojach zestawy autoloaderów (np. mój Open Power Autoloader...),
- dostajesz do ręki gotowe rozwiązanie, które jest odpowiedzią na wszystkie Twoje pytania.

A jak sobie poradzić z wyszukiwaniem? Mechanizmem refleksji. Podajesz przestrzeń nazw, w której leżą klasy do ładowania, używasz refleksji do wyciągnięcia ścieżki, używasz file_exists(), a jak jesteś już pewny, to wołasz spl_autoload_call() i masz plik załadowany. I nie mów mi, że to nie zadziała, bo zadziała.

Ten post edytował Zyx 31.07.2011, 06:33:56
Go to the top of the page
+Quote Post

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: 22.08.2025 - 16:35