Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Hermetyzacja aplikacji i ścieżki w waszych frameworkach.
Forum PHP.pl > Forum > PHP > Object-oriented programming
Mize
Witam.

Chciałbym poznać opinie i rozwiązania forumowiczów w dwóch kwestiach.
Stworzyłem swojego fw, tak by z biblotek i mechanizmów mogło korzystać kilka aplikacji na raz. To znaczy...

Kod
/diwebFramework!/
   /Applications/ /* Tutaj mam aplikacje, które oparte są o fw. */
   /Library/
   /Logs/
   /JS Library/
   /Configurations/
   /Docs/
   /Plugins/


Dotychczas aplikacje uruchamiałem tak...

  1. <?php
  2. /* Plik index w folderze aplikacji. */
  3. require('../../Diweb.php');
  4.  
  5. /* Tak odpalam konkretna aplikacje. Laduje konfiguracje i plik glowny , w ktorym juz jest kod samego programu. */
  6. Diweb::Run('application1');
  7. ?>

W moim mniemaniu zapewnia to hermetyzację, szczelność i wygodę.
I tak się zastanawiam, czy to jest właściwe rozwiązanie. Czy nie można tego lepiej zrobić ?

A teraz druga rzecz.
Jak ustalacie scieżki do konkretnych folderów framework'a jak i danego projektu.
Korzystacie ze stałych, plików czy może w każdym miejscu wpisujecie 'osobno'. smile.gif
Dotychczas jade na stałych, ale ciekaw jestem jak to inaczej rozwiązać.
Czy definiuje je jakiś obiekt, lub jeszcze inaczej.

Pozdrawiam, i zapraszam do dyskusji.
erix
Cytat
A teraz druga rzecz.
Jak ustalacie scieżki do konkretnych folderów framework'a jak i danego projektu.
Korzystacie ze stałych, plików czy może w każdym miejscu wpisujecie 'osobno'.
Dotychczas jade na stałych, ale ciekaw jestem jak to inaczej rozwiązać.

Na stałych. Nie ma sensu (IMHO) tworzenia osobnych obiektów tylko dlatego, aby czytać ścieżki do paru folderów, które najczęściej nie zmieniają się od momentu instalacji aplikacji. winksmiley.jpg

Osobiście proponowałbym działanie na ścieżkach bezwzględnych.
dr_bonzo
Ja mam u siebie tak:
Kod
/application
/framework


a w aplikacji dostep do stalych APPLICATION_ROOT + FRAMEWORK_ROOT, do tego __autoload() i w niewielu miejscach musze korzystac z podawania sciezek. Stale to oczywiscie dirname( __FILE__ ) == czyli sciezki bezwzgledne.
Black-Berry
Kod
/public_html/
   /EdcApplication/
       /Frontend/
       /Backend/
   /EdcEngine/
   /EdcMedia/
   /EdcPlugins/
   /EdcLanguage/


Najbardziej zaskakuje mnie w Twoim podziale /JS Library/ (no chyba ze uzywasz jakiegos frameworka do JS ale zazwyczaj jest tak ze na stronach robi się wstawki i one zawsze lecą do folderu plugins.)
Configurations też chyba powinien znajdować się wewnątrz aplikacji.
Po co masz folder Docs?
Mize
W /JS Library/ mam najpopularniejsze frameworki js, w tym jQuery, dla którego mam wsparcie w swoim frameworku.
Jak na razie korzystam z niego tylko ja, więc pare rzeczy jest zwyczajnie z wygody.

W /Docs/, trzymam licencje, dokumentacje, projekty i diagramy. Te dwa ostatnie, jak mówiłem dla własnych potrzeb.

A co do /Configurations/, to trzymam tam pliki konfiguracyjne aplikacji - czyli domyślny tryb uruchomienia, ścieżka, etc.
Z takiego pliku tworze nowy projekt, lub jeśli już takowy istnieje, to ładuje domyślne parametry.

Oczywiście każda aplikacja ma swój folder z konfiguracją w swoim katalogu.

Jeszcze dodatkowe pytanie, ograniczacie się do dwóch stałych jak FRAMEWORK_ROOT i APPLICATION_ROOT, czy stosujecie ich więcej?
Ja definiuje ścieżki dla prawie wszystkich głównych katalogów i nie wiem czy to ma sens.

Pozdrawiam.
starach
U mnie tak wygląda większa część pliku config.php który wczytuję w pierwszej linijce index.php ( w następnej mam dołączanie klas silnika i jego uruchomienie )
  1. <?php
  2. // -------------------------- //
  3.  
  4.    // Start - Misc
  5.        define('EXT', '.php');
  6.        define('EOL', "\n");
  7.        define('DS', DIRECTORY_SEPARATOR);
  8.    // Stop - Misc
  9.    
  10. // -------------------------- //
  11.  
  12.    // DIR_OS_TMPL :: engine/Website.php
  13.    // DIR_HREF_TMPL :: engine/Website.php
  14.    // DIR_HREF_TMPLS :: engine/Website.php
  15.    // WEBSITE_ADDRESS :: engine/Website.php
  16.    // WEBSITE_TEMPLATE :: engine/Website.php
  17.    // WEBSITE_LANGUAGE :: engine/Website.php
  18.    
  19.    // Start - Directory
  20.        define('DIR_OS_MAIN', getcwd().DS);
  21.        define('DIR_OS_MEDIA', DIR_OS_MAIN.'media'.DS);
  22.        define('DIR_OS_CFG', DIR_OS_MAIN.'config'.DS);
  23.        define('DIR_OS_CACHE', DIR_OS_MAIN.'cache'.DS);
  24.        define('DIR_OS_ENGINE', DIR_OS_MAIN.'engine'.DS);
  25.        define('DIR_OS_LIBRARY', DIR_OS_MAIN.'library'.DS);
  26.        define('DIR_OS_MODULE', DIR_OS_MAIN.'module'.DS);
  27.        define('DIR_OS_TMPLS', DIR_OS_MAIN.'templates'.DS);
  28.        define('DIR_OS_TMPLS_CACHE', DIR_OS_CACHE.'templates'.DS);
  29.    // Stop - Directory
  30.  
  31. // -------------------------- //
  32. ?>
Black-Berry
@orglee Czy to nie jest przypadkiem sztuka dla sztuki? Nie sądzicie że najważniejsza powinna być maksymalna prostota? Czy kiedykolwiek zdażyło się żeby DS był czymś innym niż '/' albo końcówka pliku czymś innym niż .php? Poza tym jeśli decydujemy się na nazwę folderu media to nie zmieniajmy go już nigdy nie trzeba będzie wprowadzać dodatkowych definicji.
starach
@Black-Berry Bardzo możliwe że niektóre stałe są zwyczajnie niepotrzebne. Moim zdaniem jest przede wszystkim kwestia przyzwyczajenia i upodobań. Jeśli idzie natomiast o DS to biorąc pod uwagę że moja maszyna produkcyjna jest na Windowsie nie jest to koniecznie chybiony pomysł mimo iż z tego co wiem funkcje PHP operujące na systemie plików tłumaczą ukośniki dla każdego systemu osobno.
Black-Berry
No rozumiem że "może się zdażyć" ale przez ostatnie kilkanaście mieśięcy starając się przeiwdzieć wszystko wpakowałem się w bagno po uszy. Teraz kierując się jak największa prostotą pisze mi się o wiele łatwiej no i sypiam spokojniej bo jest mniej miejsc w kodzie które mogą się zepsuć. Projekty piszę może dłużej ale poprawek jest o wiele mniej.
plurr
ja rowniez korzystam z rozwiazania, ktore podal dr_bonzo. Do tego jesli mamy virtualke lokalnie to nic sie nie powinno zepsuc podczas pakowania aplikacji na serwer smile.gif Czasem tez mam po prostu jakas sciezke w konfigu, prostota w edycji - ale to sa pierdoły typu "errorPath".
starach
Z doświadczenia - które co prawda przebogate nie jest - wiem że należy korzystać ze ścieżek bezwzględnych. Czyli zaczynających się od root'a lub od litery partycji / dysku. Co prawda problemy ze ścieżkami miałem pisząc proceduralnie i tak naprawdę rozwiązaniem ich były właśnie ścieżki bezwzględne. Teraz używam tego sposobu przez wzgląd na przyzwyczajenie. Poza tym wydaje mi się że nazwy stałych które wybrałem są w miarę intuicyjne przez co kod jest bardziej przejrzysty.

IMO. Nie trzeba się zastanawiać czy plik który wywołuję jest w tym katalogu czy jakimś podrzędnym.
Chyba wam też się zdarzają takie same nazwy katalogów rozsiane po projekcie.
wrzasq
DS to moim zdaniem niepotrzebne zamieszanie tongue.gif. PHP na wszystkich platformach dopuszcza / jako separator plus pod Windowsem \, więc spokojnie można wszędzie używać /. Też kiedyś korzystałem ze stałych, ale w momencie gdy musiałem napisać aplikację korzystającą z dodatkowo plików zewnętrznego oprogramowania to potem jeszcze odpowiednie zapisywanie tej ścieżki podajej w configu... i do tego podkatalogi... i kopiowanie... nieee... odpada. A / można jak już powiedziałem bez problemów stosować wszędzie. Windows nie robi tutaj żadnej różnicy. Nie za bardzo widzę jakieś sensowne zastosowanie dla tej stałej w skryptach PHP - raczej przy generowaniu plików dla innego oprogramowania. No i odpada od razu problem, że się zapomnimy i użyjemy \ jako znaku ucieczki gdzieś winksmiley.jpg.

-edit-

@Black-Berry: Teraz już raczej ciężko (chociaż ostatnio robiłem mailing dla jednej firmy, która nadal miała tak skonfigurowany hosting o.0), ale szczególnie w początkach PHP5 większość serwerów przed całkowitom przesiadką na PHP5 do plików .php używała PHP4, a dla PHP5 trzeba było używać .php5. Nie wspominając o oszołomach, co używają .inc winksmiley.jpg.
Black-Berry
Cytat(orglee @ 11.12.2008, 22:08:40 ) *
Z doświadczenia - które co prawda przebogate nie jest - wiem że należy korzystać ze ścieżek bezwzględnych. Czyli zaczynających się od root'a lub od litery partycji / dysku.

Jak można zatem używać ścieżek zaczynających się od root'a jeśli wykupujesz serwer z folderkiem public_html a nie wiesz jak daleko ma on do roota albo literki dysku ? @.@
mike
Cytat(Black-Berry @ 12.12.2008, 11:20:46 ) *
Jak można zatem używać ścieżek zaczynających się od root'a jeśli wykupujesz serwer z folderkiem public_html a nie wiesz jak daleko ma on do roota albo literki dysku ? @.@
http://pl2.php.net/manual/pl/function.realpath.php
dr_bonzo
@Black-Berry: dirname( __FILE__ )
Black-Berry
Cytat(dr_bonzo @ 12.12.2008, 12:25:06 ) *
@Black-Berry: dirname( __FILE__ )

No fakt. A co to daje bo jakoś zawsze używałem względnych ścieżek i jakoś śmigało?
starach
Cytat(Black-Berry @ 12.12.2008, 12:33:19 ) *
No fakt. A co to daje bo jakoś zawsze używałem względnych ścieżek i jakoś śmigało?
Spokojniej sypiam. tongue.gif
wrzasq
@Black-Berry: a jak musisz na przykład uruchomić skrypt z innego katalogu, chociażby przez cron'a tongue.gif. albo inny skrypt/program chce po prostu go wywołać będąc w swoim katalogu roboczym.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.