szkielet aplikacji Zibi-Core

dodał zhornik, 24 lipca 2008 r.

Zibi-Core to szkielet aplikacji PHP/MySQL opracowany przeze mnie na potrzeby forum audiohobby.pl. Pomysł okazał się niezwykle dobry - z wielu względów. Po pierwsze jest szybki i stabilny. Na każdym kroku zastosowane są funkcje obsługi błędów, które jak się okazuje przy normalnym traktowaniu skryptu i tak nie są uruchamiane. Szybkość oprogramowanie to zawdzięcza technologii proceduralnej. Jak wiadomo obiektowość przydaje się przy pracy zbiorowej programistów lub rozwijaniu kodu przez kogoś innego - po prostu operuje się na bardziej intuicyjnych strukturach danych. Jak się okaże w dalszej części opisu, stosująć jasne i konsekwentne zasady można napisać intuicyjny kod także w ujęciu proceduralnym. Zyskamy dzięki temu na szybkości. System forum audiohobby.pl nie sprawiał najmniejszych problemów przy obciążeniu rzędu kilkunastu tysięcy wywołań na dobę (warto zaznaczyć że serwer jest tam załatwiony "po znajomości" i nie grzeszy szybkością).

Struktura logiczna systemu

Schemat Zibi-Core
  • index.php - każde wywołanie strony odwołuje się do tego pliku, za sprawą mod_rewrite uzyskujemy ładne adresy mimo sterowania zmiennymi GET
  • action - wykonuje operacje które nie wyświetlają niczego w przeglądarce, np. obsługa formularzy, zapis do bazy, itd. Mogą one w trakcie zmieniać zmienną ID
  • id - w zależności od zmiennej GET przygotowuje odpowiednie dane, tworzy obiekt Smarty i wyświetla go
  • Zibi-Error - biblioteka mojego autostwa, przechwytuje błędy zarówno PHP jak i klasy PEAR. Wyświetla przyjazny komunikat o błędzie, w przypadku włączonego trybu roboczego zamiast szczegółów technicznych zwraca ID błędu, a same informacje o nim zapisuje w logach (podpisane zwróconym ID)
  • funkcje bazodanowe - do każdej tabeli bazy istnieje prosta biblioteka z funkcjami które generują zapytanie do bazy, wywołują je i czasami wstępnie przetwarzają wynik operacji. Każda funkcja coś zwraca: albo dane albo wartość logiczną powodzenia operacji. Wprowadzenie tego elementu w schemacie ułatwia zarządzanie projektem, tworzenie wyspecjalizowanych funkcji i diagnozowanie systemu
  • Zibi-DB - w zależności od kształtu zapytania wywołuje je z klasy PEAR::DB z odpowiednimi parametrami co odciąża bazę od pobierania nadmiarowych danych. Odpowiada także za połączenie z serwerem bazodanowym, przechwycenie błędów połączeń i zapytań wraz z odesłaniem ich do Zibi-Error

Struktura katalogowa

Schemat plików Zibi-Core
  • [action] - dla każdej operacji istnieje oddzielny plik, który jest odpowiedzialny np. za założenie konta, zalogowanie, itd.
  • [application] - funkcje bazodanowe, do każdej tabeli bazy oddzielny plik
  • [config] - pliki konfiguracyjne oprogramowania, zdefiniowane w nich stałe są używane w całym kodzie
  • [engine] - biblioteka startowa, przygotowuje m.in. nagłówek strony (w odwołaniu do Smarty), generuje dynamicznie sekcję title oraz meta-tagi
  • [gfx] - grafiki użyte w szablonie strony
  • [id] - pliki sekcji ID aplikacji, do każdej możliwej opcji jeden plik. Przygotowują dane dla szablonu Smarty i wyświetlają go
  • [logs] - miejsce na logi aplikacji, trzymane w pliku tekstowym
  • [mail_templates] - szablony wiadomości e-mail generowanych przez system
  • [templates] - szablony Smarty
  • [templates_c]] - tymczasowe pliki skompilowanych szablonów

Pomijam tu pliki odpowiedzialne za panel administracyjny, przez analogię są to: admin.php, [admin_action], [admin_id], [admin_templates], [admin_templates_c]. Używają one tych samych bibliotek odnośnie bazy i obsługi błędów.

Niedługo zamieszczę przykładowy kod strony na tym silniku wraz z komentarzami.