Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Układ klas w core FW
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Od dawna używam mojego FW do trzerzenia projektów. Moje klasy są umieszczone w katalogu /core/ frameworka, który rzy tworzeniu instancji głownej klasy jest skanowany. W taki sposób mapowane są wszystkie klasy, które później w __autoload() są includowane po wygenerowanych ścieżkach.

Ostatnio jednak pomyślałem, że jest to rozwiązanie bardzo elastyczne, jednakże pochłania te kilka milisec działania aplikacji. Pokusiłem się o zastanowienie jak inaczej można ładować klasy. Podsunął mi się projekt Zend Framework i podobna do niego aplikacja Rapide. Scieżka tak naprawde zawarta jest w nazwie klasy, przysłowiowe poziomy katalogów wyznaczają znaki _ . Poztanowiłem zebra plusy i minusy obu sposobów.

Mapowanie core:
  • [+] Klasy mogą leżeć w różnych folderach, niezależnie od ich nazwy
  • [+] Luźne powiązanie pomiędzy nazwą klasy, a ścieżką położenia pliku
  • [-] Trzeba zmapować core
Rozwiązanie Zend Framework:
  • [+] Nie trzeba mapować core, ścieżki są sztywne
  • [-] Nazwa jest ściśle uzależniona od położenia klasy
  • [-] Masa folderów z zazwyczaj jednym plikiem wyjątku
Mimo tego, że więcej minusów znalazłem w opracowaniu Zend'a i tak jestem bardziej przychylny do tego sposobu, bo nazwę przykładowo Zend_Cache_Exception, można zmienić na Zend_Exception_cache, wówczas mamy jeden folder ze wszystkimi wyjątkami. To samo tyczy się interfejsów.

Gdyzie mnie również nazewnictwo, każde wejście do folderu to znak _. Chciałbym, zby wejscie do folderu było rozdzialane poprzez kolejną wielką literę, np zamiast Zend_Cache_Exception piszemy ZendCacheException. To milsze dla (przynajmniej mojego) oka. W związku z tym napisałem skrypt (na szybko funkcja mniej więcej jak by się dzielił string, oczywiście tablicę zamienie na stringi oddzielone "/"):
  1. <?php
  2.  
  3. function ExplodeByUpper($sString)
  4. {
  5. $aExplosion = array();
  6.  
  7. $iLenght = strlen($sString);
  8. $iLastPosition = $iLenght;
  9.  
  10. for($iPosition = $iLenght - 1; $iPosition >= 0; $iPosition--)
  11. {
  12. if($sString[$iPosition] === strtoupper($sString[$iPosition]))
  13. {
  14. $aExplosion[] = substr($sString, $iPosition, ($iLastPosition - $iPosition));
  15. $iLastPosition = $iPosition;
  16. }
  17. }
  18.  
  19. return array_reverse($aExplosion);
  20. }
  21.  
  22. var_dump(ExplodeByUpper('AlaMaBrzydkiegoKota'));
  23.  
  24. ?>

Prph powiedział, że moje nazewnictwo klas (rozpoczynające dir entry z wielkich liter) może mnie ograniczyć, dlaczego to nie wiem... rozmowa się urwała, dlatego proszę o dokładne wyjaśnienie.

Co Wy na ten temat sądzicie? Jaki uklad wybrać? A może macie inne pomysły rozmieszczenia plikow komponentów framewroka?

Prosiłbym o przykłady, teorię znam. Jak Wy macie to zrobione w swoich FW (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam, Athlan (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Athlan 20.01.2007, 18:01:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
athabus
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Cytat(Athlan @ 20.01.2007, 18:00:47 ) *
Rozwiązanie Zend Framework:
  • [+] Nie trzeba mapować core, ścieżki są sztywne
  • [-] Nazwa jest ściśle uzależniona od położenia klasy
  • [-] Masa folderów z zazwyczaj jednym plikiem wyjątku


Twoje minusy to moim zdaniem plusy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie wiem czy coś pisałeś w ZF czy tylko znasz go z widzenia, ale moje odczucie jest takie, że organizacja plików jest super. Dzięki temu jest jakiś schemat nazewnictwa, który łatwo opanować. Ostatnio łapie się na tym, że częściej sprawdzam jak się nazywają moje klasy niż te z ZF choć bawię się tym frameworkiem relatywnie krótko. Zawsze wiem co idzie w jakiej kolejności. Osobiście nie przeszkadza mi duża liczba folderów - nawet wolę gdy w folderze jest kilka plików zamiast 20... jakoś łatwo mi się szuka.
No ale to co piszę to subiektywne odczucia - Ty możesz mieć inaczej.

Co do kwestii wydajności, to jeśli zapisujesz mapę do pliku to nie powinno być problemów - sam tak robię z moimi klasami i jest ok. Jeśli natomiast za każdym razem skanujesz swoje foldery w poszukiwaniu odpowiedniej klasy... to warto to zmienić w pierwszej kolejności.

Sposób Zenda też nie jest idealny - operacje na stringach typu explode itp są podobno dość kosztowne (nie sprawdzałem więc nie wiem na 100% - ktoś o tym pisał w temacie o autoloaderach). Ale jednak wygoda użytkowania sprawia, że zamierzam przepisać swoje klasy na taką właśnie organizację.

//edit

Cytat
U mnie mapa wczytuje generowana jest za każdym startupem frameworka. Skanowane sa wszystkie foldery i podfoldery składu frameworka. Możnaby było generować jakąś teblicę zaserializowaną z mapą plików, ale IMHO za dużo kombonowania.

Generowanie mapy za każdym razem od początku to baaardzo zły pomysł. Serializowanie tego to kilka linijek kodu, a korzyści są ogromne.

Ten post edytował athabus 20.01.2007, 19:30:46
Go to the top of the page
+Quote Post

Posty w temacie
- Athlan   Układ klas w core FW   20.01.2007, 18:00:47
- - dr_bonzo   CytatPrph powiedział, że moje nazewnictwo klas (ro...   20.01.2007, 18:54:06
- - Athlan   CytatI jaki w tym problem? Robisz to raz i zapisuj...   20.01.2007, 19:23:43
- - athabus   Cytat(Athlan @ 20.01.2007, 18:00:47 )...   20.01.2007, 19:28:15
- - dr_bonzo   CytatMożnaby było generować jakąś teblicę zaserial...   20.01.2007, 19:31:23
- - cadavre   Ja dziś napisałem klasę do obsługi __autoload...   20.01.2007, 20:50:44
- - Athlan   @cadavre, tak ale myśle nad tym, żeby się robiła o...   20.01.2007, 21:25:03
- - cadavre   md5 na folder? Odczytać RecursiveDirectoryIterator...   20.01.2007, 21:27:41
- - Cysiaczek   Proponuje prościej. Zrób mapę i zapakuj do statycz...   20.01.2007, 22:59:33
- - Athlan   @cadavre, no tak, ale mapujemy core, a tego chemy ...   20.01.2007, 23:22:17
- - cadavre   Ten czas naturalnie przy przetwarzaniu 100x. Ale i...   21.01.2007, 00:33:05
- - Athlan   Dobra, klamka zapadła, zdecydowałem się na sposób ...   21.01.2007, 00:58:55
- - dr_bonzo   Po co ci czytelna mapa -- ona ma byc czytelna tylk...   21.01.2007, 02:40:07
- - mysz   Co do rozdzielania po wielkich literach: do tego ł...   21.01.2007, 11:27:36
- - athabus   Co do odświeżania mapy i jej zerowania to ja zasto...   21.01.2007, 11:39:59
- - Athlan   CytatBTW uważam, że przechowywanie całego rozkłada...   21.01.2007, 12:57:30
|- - athabus   Cytat(Athlan @ 21.01.2007, 12:57:30 )...   21.01.2007, 13:37:27
- - dr_bonzo   Co rozumiem przez mape klas (to co w php Pro / Aut...   21.01.2007, 14:53:25
- - J4r0d   Cytat(Athlan @ 21.01.2007, 12:57:30 )...   21.01.2007, 23:18:00
- - Athlan   CytatCo u Ciebie robi kalsa główna? Klasa główna,...   22.01.2007, 08:48:06


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: 14.10.2025 - 03:12