Strona głównaFacebookTwitterInstagramRSS
Dzisiaj jest piątek, 28 kwietnia 2017
JAK przyspieszyć renderowanie w BlenderzeAnimacja 2D w BlenderzeRozdzielczość druku wielkoformatowego
Mój własny framework #03

Mój własny framework #03

poniedziałek, 2010-09-270

Jak już pisałem nieraz, głównym założeniem mojego frameworka był minimalizm. Minimum kodu, minimum plików. W sumie to chyba zdrowy objaw, bo im więcej kody tym więcej możliwości popełnienia błędów i więcej potencjalnych dziur. Poza tym jestem leniwy i nie lubię utrudniać sobie życia :)

Czasami zdarza mi się przeglądać cudzy kod, np. podczas wprowadzania zmian czy poprawek na jakiejś stronie. Spotykam się czasami z czymś takim, że plik zawiera tylko jedno polecenie, mianowicie includowanie innego pliku. Do dziś nie rozgryzłem celu takiego działania. Zakładam, że to może być tymczasowa proteza i kiedyś w tym pliku będzie coś innego. Ale mogę się mylić.

Minimum includowania

Nie wiem, jak takie wielokrotne includowanie fizycznie realizują serwery, ale z doświadczenia programistycznego wiem, że operacje na plikach należą do jednych z najwolniejszych (dostęp do dysku, odczytanie nazwy pliku, znalezienie pliku, odczytanie go itp.). Być może piszę teraz głupoty, ale wydaje mi się, że jeden większy plik (zawierający nawet funkcje aktualnie nieużywane) zostanie przetworzony szybciej niż kilka małych. Stąd najważniejsze operacje i dane zawarłem w kilku plikach realizujących następujące zadania:

  • definiowanie zmiennych i tablic używanych w systemie
  • klasa komunikująca się z bazą MySql
  • główna klasa obsługująca podstawowe tablice systemu, zawierająca metody do obsługi stron statycznych, newsów, galerii, linków, użytkowników itp. To wystarcza do większości serwisów. Bardziej skomplikowane funkcjonalności realizują dodatkowe moduły
  • ogólne funkcje do realizacji różnych drobniejszych zadań np. osadzająca animację flash czy mapkę z googli na stronie

Te kilka plików includowanych jest zawsze w panelu admina i po stronie usera.

Połączyłem też wykonywanie akcji (np. z formularzy) z samymi stronami zawierającymi formularz. Domyślam się, że to się kłóci z większością zasad programowania, ale wkurzało mnie ciągłe przeskakiwanie między plikami. Wolę sobie przewinąć źródło o ekran czy dwa niż skakać między oknami. Kwestia wygody. No i nie mam bałaganu w plikach. Żeby zabezpieczyć stronę przed ponownym wysłaniem formularza (np. po odświeżeniu strony) wprowadziłem dodatkową zmienną z losową wartością, która jest sprawdzana przed akcją związaną z formularzem. Przed przetworzeniem formularza jest ona porównywana z ciastkiem, po wykonaniu zapisywana do ciastka. Istniejące ciastko nie pozwoli na ponowne wykonanie formularza. Oczywiście zamiast ciastka można użyć zmiennej sesyjnej, co kto lubi.

Dalej w temacie minimalizmu

Jak wiadomo najbardziej podatnym miejscem na włamania jest przekazywanie parametrów, zwłaszcza przez GET. Dlatego istotne jest, żeby przekazywać ich jak najmniej i najlepiej, żeby to były liczby. Przy liczbach bowiem najtrudniej przemycić złośliwy kod. Wystarczy zastosować rzutowanie (int)$_GET["zmienna"] i już mamy czystą liczbę. Im więcej dodatkowych parametrów da się odczytać z bazy lub jakoś obliczyć, to należy się tego trzymać. Dlatego w przyjaznych adresach istotna jest liczba, z której system odczytuje odpowiednią podstronę.

A jak na podstawie tej liczby odczytuję odpowiedni szablon do wyświetlenia treści?

To proste. Każdy rekord danych ma swój typ: page, news, galeria, artykuł itp. Jeśli dla danego typu danych istnieje szablon, jest on odczytywany. Jeśli jakiś typ nie ma przypisanego szablonu (np. menu) wczytywana jest strona błędu 404. Można też zastosować kolumnę zawierającą nazwę szablonu.

Przykładowa kolejność odczytywanych plików:

  • wszystkie potrzebne pliki systemowe (główna klasa, obsługa bazy itp.)
  • dodatkowe moduły użytkownika jeśli są (stałe, zmienne, klasy, funkcje)
  • nagłówek (sekcja HEAD serwisu, ale można tu wrzucić także nagłówek widoczny w serwisie - baner, menu główne itp)
  • szablon strony
  • stopka (powtórzone menu, info o autorze itp.)

Dzięki temu po utworzeniu wspólnych sekcji serwisu można skoncentrować się już tylko na samych szablonach wyświetlających konkretną treść.

Na razie koniec.

Jeśli podoba Ci się wpis,
koniecznie zalajkuj,
skomentuj i zapisz się na