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
Athlan
post
Post #2





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

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


Cytat
BTW uważam, że przechowywanie całego rozkłada FW w mapie jest niepotrzebne - przecież w większości przypadków wykorzystujesz 30% klas - bardzo rzadko zdarza się sytuacja, że dany projekt wykorzystuje wszystkie klasy danego FW - po co zatem przechowywać całą mapę - ja u siebie zastosowałem automatyczne dodawania do mapy tylko tych plików, które są używane w danym projekcie - czyli te o które projekt poprosił chociaż raz.

@athabus, no ale zobacz jakie są minusy. Jeżeli zmienię ścieżke jakiejś klasy, to mapa musi zostać kasowana we wszystkich aplikacjach korzystających z frameworka. Przetrzymywanie mapy dla danego projektu jest IMHO niepotrzebne. Szybciej stworzę mapę wszystkich komponentów, niż za każdym razem będę sprawdzał czy istnieje on na mapie i po użyciu jednej klasy więcej od razu muszę tworzyć nową mapę...

Postanowiłem, że mapę będzie trzymał sobie framework w swoim folderze obok klasy głównej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Może teraz się wszyscy czepiamy, przecież to milisekundy, ale jakby tak rozumować to wogóle po co cache mapowania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
jak optymalizować to od początku :-)

Dokładnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam, Athlan (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
athabus
post
Post #3





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

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


Cytat(Athlan @ 21.01.2007, 12:57:30 ) *
@athabus, no ale zobacz jakie są minusy. Jeżeli zmienię ścieżke jakiejś klasy, to mapa musi zostać kasowana we wszystkich aplikacjach korzystających z frameworka. Przetrzymywanie mapy dla danego projektu jest IMHO niepotrzebne. Szybciej stworzę mapę wszystkich komponentów, niż za każdym razem będę sprawdzał czy istnieje on na mapie i po użyciu jednej klasy więcej od razu muszę tworzyć nową mapę...

Ale każdy projekt powinien mieć swoją własną mapę... Załóżmy że piszesz stronę dla swojej babci - coś ala blog. Wykorzystasz w nim 20 z 200 klas swojego FW - po co za każdym razem parsować te wszystkie klasy (w sensie plik z mapami do nich), skoro i taki ich nie używasz. Poza tym ja w mojej mapie przechowuje również informacje o klasach z danego projektu np. modele czy kontrolery itp, także jest to dodatkowy powód dla którego każdy projekt ma swoją mapę.

Cytat
Może teraz się wszyscy czepiamy, przecież to milisekundy, ale jakby tak rozumować to wogóle po co cache mapowania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


To już chyba taki styl życia :-)
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 18:46