Idea dokumentu
Dokument zatytułowany Zasady tworzenia API dla grupy Invenzzia zawiera zbiór wytycznych opisujących, jak projektować interfejsy programistyczne bibliotek i narzędzi, by spełniały one określone wymagania:
- łatwość łączenia z innymi projektami,
- czytelność,
- elastyczność,
- wydajność,
- kompatybilność i możliwość wielokrotnego wykorzystania raz napisanego kawałka kodu.
Składa się on z kilku sekcji, które prezentują zasady poprawnego użycia:
- elementów statycznych języka PHP,
- wyjątków,
- elementów magicznych języka PHP,
- wzorców projektowych,
- elementów nieobiektowych języka.
Oprócz tego, podałem tam reguły definiowania list argumentów dla funkcji, opisałem istotę rozumienia efektów ubocznych tworzonego kodu i sekcję z rozwiązaniami typowych problemów. Osobna sekcja poświęcona jest automatycznemu ładowaniu klas. Ustanawia ona omawiany kilkakrotnie na tym blogu standard nazewnictwa klas PSR-0 jako obowiązujący. Ponieważ definiuje on tylko absolutne podstawy (zasady tłumaczenia nazwy klasy na ścieżkę w systemie plików), należało go dodatkowo rozszerzyć o konkretne reguły dotyczące nazewnictwa poszczególnych elementów. W tym miejscu wzorowałem się na konwencjach stosowanych już w Symfony 2 oraz Zend Frameworku, jednak bez względu na to, kod zbudowany według tych wytycznych będzie mogła załadować każda automatyczna ładowarka kompatybilna z PSR-0.
Założenia
Jeśli chodzi o idee, od których wyszedłem, część z nich opisałem w niedawnym wpisie Harry'emu już podziękujemy. W skrócie zdecydowałem się postawić na jawność. Tworzony kod nie powinen zawierać metod magicznych, a używanie pól statycznych zostało zabronione, aby wykluczyć tworzenie stanów globalnych. Porównując sobie wyniki uzyskane przy okazji prac nad Trinity i oglądając kod Symfony 2, wydaje mi się, że jest to najlepsza droga zarówno pod względem elegancji, jak i wydajności, ponieważ de facto nic ona nie kosztuje. Jest to jedynie kwestia odpowiedniego, logicznego zorganizowania klas. Co więcej, w niestandardowych konfiguracjach może przynieść nawet pewien zysk wydajności. Ostatecznie jeśli API nie będzie wykonywać w tle różnych dziwnych rzeczy, które niekoniecznie potrzebujemy, nie będziemy musieli tworzyć obejść niwelujących niepożądane efekty uboczne.
Kwestia użycia
Czekam na komentarze, uwagi i propozycje. Dokument będzie dostępny publicznie, ponieważ sądzę, że przyda się wielu programistom. Mimo iż jest on podpisany jako Invenzzia, poza tym faktem reguły te mają przeważnie charakter uniwersalny, który można zastosować wszędzie. Ostatecznie im więcej programistów będzie tworzyć przenośny kod, tym bardziej skorzysta na tym cała społeczność. Odnośnik do dokumentu w formacie PDF znajduje się w przypisach.






Napisał batman w piątek, 28 stycznia 2011 o 15:57
Cieszę się, że byłem inspiracją dla powstania tego dokumentu, jednak nadal źle interpretujesz wyjątki, a zwłaszcza LengthException. Przecież to oczywiste, że niewłaściwa długość pliku, jest błędem logicznym a nie błędem czasu wykonywania.
Napisałeś "LogicException reprezentuje natomiast błedy wynikajace z próby błednego uzycia elementu". W takim razie dlaczego OverflowException dziedziczy po RuntimeException, a nie po LoginException? Przecież jest to ewidentnie niepoprawnie użyty element.