Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%)
|
Problem stary jak świat: system wymaga włączenia sporej liczby plików i zarządzanie tym jest upierdliwe. Do tego nie należy włączać więcej kodu niż potrzeba, a najlepiej zrobić jakieś lazy load.
Oczywiście, technik jest wiele: 1) require_once rozsiane po plikach, najlepiej poprzedzone jakąś stałą, np. require_once ROOT_DIR . '/foo/Foo.class.php'; 2) Prado: deklarujemy namespacy - np. za pomocą funkcji using(), co dodaje nam ścieżki do include_path, a potem niech php znajdzie klasę. 3) Autoloader + mapa (nazwa klasy => ścieżka do pliku); autoloader wczytuje mapę i na jej podstawie jest w stanie znaleźć każdą klasę Są jeszcze jakieś inteligentne sposoby? Dobry mechanizm powinien być odporny na "przemeblowanie" struktury plików (np. chcemy połączyć kilka klas w jeden plik). BTW, włączanie plików bez klas (tylko funkcje i kod) jest gorsze, bo nie ma tego czegoś, czego można szukać po plikach... kolejna zaleta OOP? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%)
|
Cytat("serafin") Hawk: Wykorzystales 10 plikow na to co mozna zrobic w jednej klasie (i nie powiedziane ze gorzej). No dobrze, porozmawiajmy wobec tego konkretnie. Na przykładach. Zaraz zobaczymy, czy rzeczywiście nie gorzej. 1. Chcę włączyć do mapy pliki z katalogów foo/first i foo/second, ale absolutnie nie z foo/third, bo tam są przykłady, które niepotrzebnie zaśmiecałyby mapę. 2. Chcę przeparsować tylko pliki o rozszerzeniu .class.php. Wszystko inne jest niepotrzebne. 3. Chcę, żeby w mojej mapie klasy były posortowane alfabetycznie. Dzięki temu mogę łatwo sprawdzić, jakie klasy są w moim pakiecie, a ponieważ jest to bez różnicy dla przetwarzania, nie ma żadnego powodu, żeby tego nie zrobić. No chyba że narzędzie jest gorsze... 4. Chcę wygenerować mapę dla zewnętrznego pakietu, który inaczej nazywa swoje klasy. Jak narzędzie, to uniwersalne, a nie ograniczone do mojego kodu, prawda? Pakiet jest w zupełnie innym miejscu na dysku. 5. Chcę w wersji produkcyjnej wrzucić kilka klas, które zawsze zawsze są używane, do jednego pliku, żeby przyspieszyć działanie i żeby prościej to wyglądało dla użytkownika końcowego. To częsta praktyka - weźmy np. mojavi. 6. Chcę za pomocą mojego autoloadera wygenerować mapę, która może być od razu wykorzystana w twoim systemie. Czyli plik wygląda tak samo. Chcę mieć uniwersalny autoloader, którego mogą używać inni, a nie nieprzenośne narzędzie. 7. Mam 2 mapy, do 2 różnych pakietów, i chcę obydwie naraz wbić do autoloadera. Wierzę ci, że można to zrobić w jednej klasie. Która do tego będzie mniejsza niż suma tych plików i w ogóle lepsza. Tylko nie wiem, jak... A co do tych 10 plików... rozmijasz się z prawdą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . To są cztery pliki, plus trzy interfejsy (do niczego niepotrzebne, możesz je spokojnie wywalić, ale ja mam do interfejsów sentyment), plus trzy klasy dziedziczące z klas podstawowych (miałem kaprys zrobić coś extra, ale przecież w ogóle nie musisz ich wykorzystywać). Na podobnej zasadzie możemy zacząć liczyć unit testy i pliki readme. --------------------------------------------- Cytat OOP ma sens owszem, ale nie w przypadku gdy tworzy sie klasy na 1-3 metod Wiesz, co to jest Observer? Abstract Factory? Iterator? Registry? Intercepting Filter? Chain of Responsibility? Command? Strategy? Takie różne wzorce projektowe, ale niestety bez sensu, bo mają za mało metod. Cytat Oczywiscie ze rozbijanie problemu na mniejsze czescie jest bardzo dobra technika ale sa pewne granice. Czasami mozna kilka z tych czesci polaczyc w jedna wieksza calosc bez szkody dla ostatecznego rozwiazania. To ty zacząłeś tą dyskusję, więc odpowiedz: dlaczego rozbijanie problemu na mniejsze klasy jest szkodliwe? Bo z tego, co piszesz, wynika, że wg ciebie jest. |
|
|
|
hawk Włączanie plików + autoloader 10.02.2005, 17:23:52
DeyV Aby sprawę jeszcze bardziej skomplikować - warto p... 10.02.2005, 21:46:51
Imperior Myślę, że moje rozwiązanie pomoże Ci, jeśli wpadni... 11.02.2005, 18:39:48
hawk @Imperior:
Dwie słabe strony tu widzę:
1) Wszyst... 18.02.2005, 14:39:33
bela_666 Ja mysle, zeby rozwiazac to na podobnej zasadzie j... 18.02.2005, 15:03:36
Imperior Cytat(hawk @ 2005-02-18 13:39:33)Dwie słabe s... 18.02.2005, 20:17:07
hawk @bela_666: Takie rozwiązanie na pewno pasuje do ja... 21.02.2005, 14:43:27
hawk @serafin: Możesz napisać więcej? Mi się zawsze wyd... 25.02.2005, 09:23:01
Imperior Cytat(hawk @ 2005-02-25 08:23:01)Bo problem z... 25.02.2005, 09:55:57
Vengeance A co Wam się stanie gdy zamiast System.Out będzie ... 25.02.2005, 11:42:46
hawk Nic się nie stanie, poza utratą estetyki . Chociaż... 25.02.2005, 12:06:36
Vengeance ale to jest php a nie java
Co do autoloadera... ... 25.02.2005, 12:31:22
hawk Co za problem? Sprawdzanie po zrobieniu explode je... 25.02.2005, 12:48:42
Seth Troche to stary kod ale moze sie przyda:
[PHP] po... 25.02.2005, 12:50:43
bela_666 Seth, a czy te pregi nie spowalniają bardzo przy d... 25.02.2005, 12:55:30
Seth Jakies spowolnienie napewno jest ale za to mozna l... 25.02.2005, 13:07:03
bela_666 Cytat(hawk)Podsumowując, idealnie chciałbym mieć:
... 26.02.2005, 00:02:23
Nievinny Jeśli mogę wtrącić trzy grosze, ja myślę, że można... 26.02.2005, 09:35:42
hawk @bela_666: pokaż pokaż pokaż 26.02.2005, 09:55:15
Vengeance Nievinny: jakbyś zrobił cache jakiś to ok. Teraz u... 26.02.2005, 11:55:48
bela_666 Cytat(hawk @ 2005-02-26 09:55:15)@bela_666: p... 26.02.2005, 12:21:14
Vengeance Połączyłem kody: bela_666, Nievinny oraz Imperiora... 26.02.2005, 12:36:56
Vengeance Linia nr 9: zmieniasz ją na:
Kod if(!i... 26.02.2005, 12:41:48
Nievinny @Vengeance -> Czy twoim zdaniem ładowanie z map... 26.02.2005, 17:03:09
Vengeance Nievinny: chodzi oto, aby mape generować tylko RAZ... 26.02.2005, 17:35:25
Nievinny CytatNievinny: chodzi oto, aby mape generować tylk... 26.02.2005, 17:42:59
Vengeance A po co foreach? Jeszcze opozniac ? To $map[... 26.02.2005, 18:15:03
hawk @Vengeance et al: No, bardzo ładny kod . Ja bym do... 26.02.2005, 18:42:06
Vengeance Ok userzy forum.php.pl "wymyslili" juz i... 26.02.2005, 19:07:38
Nievinny Nazwa: Autoload Class System...
może być, a klasa... 27.02.2005, 12:32:23
chmolu Ja to rozwiązałem podobnie, jak w nowym Mojavi:
[... 4.03.2005, 10:29:10
Nievinny A ja generujesz listę klas? Tu masz od razu genera... 4.03.2005, 10:52:36
chmolu Lista klas jest w pliku konfiguracyjnym autoload.i... 4.03.2005, 16:34:52
hawk @chmolu:
1) Z tego co pamietam, w __autoload nie m... 4.03.2005, 17:26:32
chmolu Cytat1) Z tego co pamietam, w __autoload nie mozna... 4.03.2005, 17:49:43
Nievinny W sumie, skrypt po raz pierwszy zaczyna działanie ... 4.03.2005, 18:05:53
Imperior Cytat(hawk @ 2005-03-04 16:26:32)1) Z tego co... 5.03.2005, 11:12:31
hawk @chmolu: Faktycznie, obsługa plików ini jest bardz... 7.03.2005, 03:36:42
Bora Pliki ini są wczytywane szybciej niż php gdyż mają... 7.03.2005, 15:06:38
Vengeance A czy są szybsze od zserializowanej tablicy, zapis... 7.03.2005, 16:07:14
Imperior Cytat(Vengeance @ 2005-03-07 15:07:14)A czy s... 7.03.2005, 17:09:23
hawk @Bora: Pliki ini moze i sa wczytywane szybciej, al... 7.03.2005, 17:19:21
orson witam ...
a moze w ini zrobic 2 sekcje ...
Kod... 7.03.2005, 22:59:24
hawk A w jaki sposob z gory okreslisz, ktora sciezke ma... 8.03.2005, 00:10:53
Nievinny A ja mam jeszcze pytanie dot. __autoload(). Czy je... 8.03.2005, 08:01:25
orson Cytat(hawk @ 2005-03-08 00:10:53)A w jaki spo... 8.03.2005, 20:18:36
hawk @Orson: nie o to mi chodzi. Masz np. (a raczej uży... 9.03.2005, 03:16:17
orson witam ...
hmm ... no to w pliku ini w sekcji clas... 9.03.2005, 07:31:00
dr_bonzo @Nievinny: wyrzuc wyjatek w tej metodzie i sprawdz... 9.03.2005, 10:25:30
Nievinny Owszem wywala wyjątek, ale nie obsługuje go w zwyk... 9.03.2005, 17:20:55
chmolu Rozwiązanie z generowaniem mapy przez skanowanie k... 12.03.2005, 23:12:26
Vengeance chmolu: Zauważ, że to Ty trzymasz każdą klasę w in... 13.03.2005, 01:10:23
chmolu @Vengeance: to prawda, nie każdy musi trzymać każd... 13.03.2005, 09:44:36
bela_666 @chmolu a jak zmienisz ścieżke do smarty ? 13.03.2005, 10:44:30
chmolu Nie używam Smarty więc nie ma żadnego problemu
... 13.03.2005, 12:43:09
Vengeance @chmolu: ty nie. Ale z tego co wynika z twoich wyp... 13.03.2005, 13:43:28
chmolu Zapewniam cię, że nie będzie to żaden problem
A... 13.03.2005, 13:55:45
Ociu Pozwole sobie odkopać temat
Zastanawiam się czy ... 4.05.2005, 18:16:29
davidD Tylko właściwie... po co XML do zwykłego przypisan... 5.05.2005, 00:09:50
matid Ja to widzę tak:
1. Crowler, szuka po określonych ... 5.05.2005, 06:37:45
Ociu Cytat(matid @ 2005-05-05 07:37:45)2. Dodatkow... 5.05.2005, 07:22:02
chmolu IMO pliki XML w tym wypadku są niepotrzebne. Szybc... 5.05.2005, 08:24:02
Nievinny XML to przeładowanie, a nam zależy na czasie, nie?... 5.05.2005, 17:06:02
matid Cytat(Nievinny @ 2005-05-05 18:06:02)XML to p... 5.05.2005, 17:55:53
bigZbig @matid -> zauwazylem u Ciebie duze przywiazanie... 10.05.2005, 09:28:27
Nievinny @matid -> ale tą mapę musisz za każdym uruchomn... 10.05.2005, 16:01:11
matid Cytat(Nievinny @ 2005-05-10 17:01:11)@matid -... 10.05.2005, 17:36:31
Nievinny Czyli trzymasz tylko katalogi do parsowania? To ni... 10.05.2005, 18:24:33
Ociu Cytat(matid @ 2005-05-10 18:36:31)Chodzi mi o... 10.05.2005, 19:40:08
matid Cytat(Ociu @ 2005-05-10 20:40:08)Przemyślałem... 10.05.2005, 20:34:10
Vengeance " trwa to ok. 0,4 s"
lol :] Mój kod (a ... 10.05.2005, 21:26:35
matid Cytat(Vengeance @ 2005-05-10 22:26:35)" ... 10.05.2005, 21:46:19
Ociu Czepiasz się szczegółów, liczba była podana dla pr... 11.05.2005, 09:08:31
Vengeance To nie było czepianie. Chodziło mi o sposób w jaki... 11.05.2005, 20:45:37
matid Dla zainteresowanych - moja klasa Autoloader: http... 11.05.2005, 21:21:56
hawk Skoro temat zrobił się popularny i każdy chce mieć... 12.05.2005, 09:45:30
bigZbig @hawk -> Amen 12.05.2005, 09:49:20
dr_bonzo ...mam i ja.
Stworzylem swojego autoloadera:
- w ... 26.05.2005, 15:15:11
Vengeance Z twojego opisu wynika mi, że za każdym uruchomien... 26.05.2005, 18:37:05
dr_bonzo CytatZ twojego opisu wynika mi, że za każdym uruch... 26.05.2005, 19:12:28
hawk Ciekawe rozwiązanie. Faktem jest, że mi by się nie... 27.05.2005, 20:47:33
dr_bonzo W koncu. Kod przepisany od nowa, lecz jeszcze nie ... 5.06.2005, 02:20:39
Imperior dr_bonzo: http://wiki.php.pl/index.php/RecursiveDi... 5.06.2005, 13:02:34
hawk Fajny kod. Nawet zdążyłem już użyć .
Kilka uwag:
... 5.06.2005, 13:23:14
dr_bonzo Cytat- nie można podać extension np. "class.p... 5.06.2005, 14:00:34
hawk A co powiecie na taką implementację?
[PHP] pobierz... 12.06.2005, 22:16:47
cagrET hawk: widzę, że używasz "notacji węgierskiej... 13.06.2005, 13:24:34
hawk Nie, nie czytałem do tej pory. Przedrostki określa... 13.06.2005, 20:10:13
matid Cytat(hawk @ 2005-06-05 14:23:14)- przydatną ... 13.06.2005, 20:30:28
dr_bonzo cagrET: link do swietnego serwisu.
CytatZ jakiegoś... 13.06.2005, 21:03:51
hawk @dr_bonzo i matid:
Niestety, phpDocumentor nie ma,... 13.06.2005, 21:51:34
matid Cytat(hawk @ 2005-06-13 22:51:34)@dr_bonzo i ... 13.06.2005, 22:12:12
hawk @matid: Pomysł wręcz genialny w swojej prostocie. ... 16.06.2005, 12:17:19
matid No rzeczywiście, @scope będzie lepsze.
Spróbuję to... 16.06.2005, 15:48:55
hawk @serafin:
1) Nikt ci nie broni tworzyć takiej map... 16.06.2005, 18:31:01
matid Cytat(serafin)Ma to sens?
A dlaczego nie? Mi osobi... 16.06.2005, 22:08:29
bela_666 Cytat(matid @ 2005-06-16 23:08:29)Cytat(seraf... 16.06.2005, 22:12:29
Imperior Cytat(matid @ 2005-06-16 21:08:29)Ma ktoś jak... 17.06.2005, 07:20:58
matid Chyba jednak skorzystam z opcji 1, ponieważ zasięg... 17.06.2005, 07:42:50 ![]() ![]() |
|
Aktualny czas: 4.12.2025 - 18:29 |