No i nadeszła chwila prawdy

Na początek przyznam, że nie czytałem dokumentacji.
Skupiłem się tylko i wyłącznie na kodzie, poprawności napisania, łatwości użytkownika, szukania pułapek dla programisty.
Zaczynamy:
- Jaka jest różnica między plikami .phtml a .html w szablonach? Dlaczego nie może być jednego rozszerzenia?
-
defined('SPAWNM') OR
die('No direct access allowed.');
Takie coś robi się za pomocą .htaccess (tak jak to masz w library/sf/cache) albo umieszczenie plików poza katalogiem www
- Podoba mi się, że używasz standardowych szablonów korzystając z czystego .php ale niestety składnia jaką się posługujesz powinna być inna (jak dla mnie bardziej czytelna) w stylu
<?php if(true) : ?>
<?= $zmienna ?>
<?php endif; ?>
- Co to za pusty bootstrap?
- sf_acl - Żadna klasa, która ma wpływ na system NIE MOŻE być klasą statyczną. Wywal statici. Jeżeli ktoś będzie chciał, użyć Acla w stylu "statycznym" użyje Rejestru. Uwaga tyczy się reszty statycznych klas, mających wpływ aplikację. Narzucasz użytkownikowi pewną "konieczność", która jest zła.
- Gdzie są testy jednostkowe?
- Singleton z registry

Śmieszna i wybuchowa mieszanka

- sf_session::deleteAll - Naprawdę nie prościej jest zrobić?
- Skalowalność sesje, cache itd a właściwie jej brak
- Masz zły phpdoc
Kod
@param - string - captcha name to valid
Powinno być
Kod
@param string $name
- Brak phpdoca dla właściwości klas - szczerze to prawie cały jest do zmiany
sf_captcha : 16 - nie wiem co to za obiekt.
- controller.php : 88 getAction
Dla mnie mały "bałagan". Dlaczego metoda kontrolera może tworzyć inne kontrolery i pobierać od nich akcje? Czy nie powinno się to dziać w frontControlerze (którego chyba nie masz)?
- Klasa Date - naprawdę DateTime wbudowany natywnie w php jest wystarczający
- Db - wspomnę jeszcze raz, że statyki nie mogą mieć wpływu na system. W tej klasie jedyną metodą statyczną jaka powinna mieć miejsce to "poCoszukaszTutajStatic"
- Exception : 21 - chyba nie ma klasy sf_filtr
- Form poległ na całej linii - polecam spojrzeć jak działają klasy formularzy w innych fw np w Zendzie
- sf_html - Po co takie klasy w kodzie?

Ale tak szczerze. Zbyt wiele nie ułatwiają a czasem są kompletnie nieprzydatne.
- sf_image - typ obrazka sprawdzamy za pomocą FileInfo z tego względu, że get imagesize można dość łatwo oszukać
- sf_image::trueResize - w temacie OFFTOP podałem ciekawszą metodę obliczania nowych rozmiarów zdjęć
- sf_jquery - Jak już to do tego celu służa helpery w szablonach
- sf_math - służy jedynie dla przeliczania kolorów więc nazwa jest myląca. Dlaczego by nie przenieść do sf_colortransform?
- na temat modelu i orm się nie wypowiadam bo to bardzo śliski temat
- sf_pager podaj przykład paginacji na rekordach. Chyba nie obejdzie się bez ręcznego klepania?
- sf_request - dlaczego ludzie filtrują dane na samym wstępie aplikacji zamiast po prostu wtedy kiedy potrzebują?
- class sf_template extends sf_controller - o nie nie panie. Logicznie te klasy nie mogą mieć ze sobą nic wspólnego ponieważ realizują kompletnie 2 różne funkcjonalności
- sf_translate::_loadTranslate - obsługę różnych formatów robi się za pomocą adapterów albo rozszerzeń klasy bazowej
- sf_upload : 147
if( isset($this->_img
->sevaFileName) ) $newFileName = $this->_img
->sevaFileName;
sevaFileName? W klasie sf_image nie ma takiej właściwości.
- gdzie repozytorium dla projektu? Chociażby GitHub
PodsumowanieWydaje mi się, że nie projektowałeś tego FW tylko pisałeś na żywioł. Brak testów jednostkowych powoduje, że twojemu FW nie można po prostu ufać.
Jest kompletnie nieskalowalny i nie założyłeś możliwości bardziej zaawansowanego użycia. Przykładowo nie mogę zmienić mechanizmu przechowywania sesji na memcache albo coś innego, ale przypadków jest oczywiście znacznie więcej.
Oczywiście nie mówię aby system był w stanie obsłużyć wszystko, ale ty powinieneś dać możliwość łatwego rozszerzenia jego funkcjonalności. Aktualnie jest to niezwykle trudne (czytaj nieskalowalne).
W skrócie system był dobry parę lat temu ale nie na te czasy.
A teraz plusy
- prefixy klas - prawidłowo sf_*, controller_*
- method chaining
- brak statycznego sf_translate

- ogólnie bardzo prosty w użyciu
- ... staram się szukać czegoś na siłe ale to chyba tyle