RSS
Dzisiaj jest sobota, 19 maja 2012

Mój własny framework #03

Dodał Andrzej, poniedziałek, 27-09-2010 (18:24)
Wrz
27
Mój własny framework #03

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ść.


czytano: 668, komentarzy: 3, kategorie: internet, projekty


Komentarze (3)

poniedziałek, 27-09-2010 (19:23)
Bardzo trafne założenia imho
sobota, 09-10-2010 (17:20)
Piszesz na początku, ze szybciej zostanie zincludowany plik o większej wielkości... Nie zgodzę się... Includowanie pliku, a działanie na nim to zupełnie dwie odmienne rzeczy. A im mniejszy plik includowany tym szybciej ładowany. Dlatego powinno się tworzyć pliki tematyczne(np. oddzielne dla funkcji systemu uwierzytelniania, oddzielny dla funkcji bloga, itd.). Dzięki temu, ilość kodu w pliku jest ograniczana do pewnej ilości linijek, a nie, że jeden plik zawiera 10 000 linijek kodu i weź wtedy w tym znajdź błędy... Jak ci na przykład gdzieś znak klamry zamykającej umknie, a błąd wskaże koniec pliku i tyle... :D I weź teraz szukaj. :)

A reszty artykułu nawet nie komentuję, bo nie zgadzam się z większością wypowiedzianych/pokazanych tu tez... Z reszta są one błędne, nie według mnie(tylko), lecz według logiki i wielu programistów... :)
sobota, 09-10-2010 (18:04)
Andrzej
Może się nie do końca zrozumieliśmy. Miałem na myśli to, że operacje na plikach (zwłaszcza znalezienie go) to najwolniejsze operacje na dysku (nie tylko serwera). Spróbuj zaincludować 1 plik o wielkości 10kb i 1000 plików o wielkości 100 bajtów. Co się się szybciej załaduje?

Ja też nie jestem za tym, żeby wszystkie funkcjonalności (często nie powiązane ze sobą) wrzucać do jednego pliku, bo faktycznie łatwo o błędy. A z drugiej strony moja główna klasa obsługująca podstawowe funkcjonalności systemu to 1 plik z niecałymi 800 liniami kodu. Owszem, mógłbym to rozdzielić na obsługę newsów, obsługę linków, obsługę galerii, systemu itp. Ale uznałem, że taki plik lepiej załadować za jednym razem. A często widywałem pliki, które includowały inne pliki i nic poza tym. Może jest w tym jakiś głębszy sens, ale ja go nie widzę.

Co do reszty artykułu, to łatwo rzucić ogólnik 'nie zgadzam się'. A może sprecyzujesz, z czym się nie zgadzasz? Bo teraz to i ja mogę powiedzieć, że nie zgadzam się z Tobą i wieloma programistami. Chętnie podyskutuję i albo obronię swoje stanowisko albo przyznam Ci rację. W końcu nikt nie jest nieomylny a fakt, że 1000 programistów robi tak a nie inaczej, nie czyni tego jedyną słuszną drogą programowania.

Dodaj swój komentarz:

Imię lub nick (obowiązkowe)
E-mail (obowiązkowy - nie będzie publikowany)
Strona WWW

Formatowanie: [b]pogrubienie[/b], [i]kursywa[/i], [u]podkreślenie[/u]

Powiadom mnie o nowych komentarzach do tego postu.

Przepisz kod z obrazka:
kod