Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Autorski framework, czy udostępnić?
matrik
post
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 2
Dołączył: 23.07.2009

Ostrzeżenie: (0%)
-----


Witajcie
Chciałbym udostępnić autorski system framework, który teoretycznie (hmm, nawet praktycznie) kładzie inne systemy.
Wykonałem prosty test na surówkach dwóch frameworków. Konfig domyślny i bez połączenia z bazą danych.
Zwykłe wyświetlenie tekstu "Hello world!". Bez wykorzystania eAccelerator'a

CodeIgniter: [0.011924028396606] 1 mb
Yii: [0.050626039505005] 5 mb
Autorski: [0.005169153213501] 768 kb

System jest okrojony i pozbawiony śmieci takich jak generatory do tworzenia formularzy czy też tworzenie zapytań SQL.
Tworzony był dla szybkiego stawiania serwisów (wiele stron korzystało i korzysta z tego systemu), dlatego nie ma wzorca projektowego MVC, lecz autorski model CCV (Controller - Component - View) dzięki któremu osiąga takie wyniki (ale czepiając się innych frameworków zasada działania jest bardzo zbliżona).
Ładowarka klas Singleton i Router nieszablonowego wywoływania kontrolerów.

Yii czy CI nie powinien ładować bibliotek, których nie potrzebuje aktualnie więc co o tym sądzicie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Ok, skoro jest kod do review, to zrobię pobieżny (uwagi w komentarzach)
  1. <? // krótka notacja tagów otwierających może przysporzyć problemów na serwerach bez ustawionej flagi short_open_tag w php.ini
  2. class woBase{
  3. static public $baseClass = array();
  4.  
  5. function run(){ // brak określenia widoczności metody
  6. return self::getClass('Application')->start();
  7. }
  8.  
  9. static function getClass($name,$run=true){ // po co te $run?
  10. $strtolower = strtolower($name); // nazywanie zmiennych nazwami funkcji to nie jest dobra praktyka
  11. //echo WOPATCH.'core/'.$name.'.php<br />';
  12. if(self::$baseClass[$strtolower]){ // NOTICE przy braku elementu w tablicy, tablica jest public, to co jeśli ktoś podmieni obiekt klasy $name na inny?
  13. //echo '- '.$name.'<br />';
  14. return self::$baseClass[$strtolower];
  15. }else{
  16. //echo '+ '.$name.'<br />';
  17. if(!class_exists($strtolower,false)){
  18. if(is_file(WOPATCH.'core/'.$name.'.php')){
  19. require WOPATCH.'core/'.$name.'.php';
  20. }else{
  21. throw new ErrorHandler('getClass - Nie odnaleziono pliku klasy o nazwie '.$name); // ErrorHandler - chyba raczej Exception lub WoException, handler byłby tym co przechwyci wyjątek
  22. return false; // zbędne, nie wykona się
  23. }
  24. }
  25. $class = new ReflectionClass($strtolower); // jaki zysk z zastosowania Reflection? Czemu nie łapiesz wyjątku ReflectionException?
  26. $object =& $class->newInstance(); // a co jeśli nowa klasa wymaga przekazania parametrów do konstruktora? po co referencja @Pyton_000
  27. self::$baseClass[$strtolower] =& $object; // po co znów referencja @Pyton_000
  28. return $object;
  29. // skoro nie korzystasz z przekazywania zmiennych do konstruktora, z ReflectionException, to wystarczy takie rozwiązanie
  30. return self::$baseClass[$strtolower] = new $strtolower();
  31. }
  32. }
  33.  
  34.  
  35. // w zasadzie autoload od getClass różni się tylko dwiema kwestiami: sprawdzaniem czy jest to smarty oraz tym, że getClass tworzy nową instancję obiektu, duża duplikacja kodu jak na działanie w kierunku optymalizacji. Może jednak pójdź w stronę $run=true i połącz zduplikowany kod.
  36. public static function autoload($name){
  37. $strtolower = strtolower($name);
  38. $dir = WOPATCH.'core/'.$name.'.php'; // $dir to raczej $file, mocno mylące
  39. if(preg_match('/smarty_/',$strtolower)){ // strpos lub strstr @by_ikar
  40. $dir = WOPATCH.'core/Smarty/sysplugins/'.$strtolower.'.php'; // znów $dir wskazujący na plik
  41. }
  42. if(!class_exists($name,false)){
  43. if(is_file($dir)){ // c.d. nieścisłości, wiem, że to tylko nazwa zmiennej, jednak za jakiś czas takie nieścisłości mogą spowodować, że głupiego błędu będziesz szukał dużo dłużej
  44. require_once $dir;
  45. return true;
  46. }else{
  47. throw new ErrorHandler(get_class($this).' - Not found class '.$name); // Exception nie ErrorHandler
  48. return false; // nie wykona się
  49. }
  50. }
  51. }
  52. }
  53. spl_autoload_register(array('woBase','autoload'));


Ten post edytował vokiel 9.02.2015, 21:17:42
Go to the top of the page
+Quote Post

Posty w temacie
- matrik   Autorski framework, czy udostępnić?   9.02.2015, 11:21:08
- - rad11   Tylko tyle? I ze niby ma kłaść narzędzia dla progr...   9.02.2015, 11:25:09
- - Pyton_000   Cyferki to i Ja Ci mogę pokazać. Mogę Ci nawet pow...   9.02.2015, 11:31:57
- - aniolekx   Napisałeś jakieś testy do niego? (TDD, BDD), jeżel...   9.02.2015, 11:53:05
- - pyro   Testowanie szybkości frameworka poprzez `echo ...   9.02.2015, 11:54:23
- - matrik   Chodziło mi tylko o wyrażenie opinii na ten temat ...   9.02.2015, 11:57:00
- - Forti   CytatJak zwykle na tym forum chamstwo jakiego nie ...   9.02.2015, 12:02:15
- - matrik   Forti Krytyka czasem jest taka, że czasem trzeba s...   9.02.2015, 12:14:23
- - Janusz1200   Za mnie framework ma robić 3 rzeczy: 1. bezpieczeń...   9.02.2015, 12:17:07
- - Pyton_000   @matrik trochę więcej samokrytycyzmu. Co z tego że...   9.02.2015, 12:21:11
- - by_ikar   Wydajność może być super, bez żadnych libów, nakła...   9.02.2015, 12:58:34
- - fizzlebubble   Yet another PHP framework... Jeśli dla Twoich zast...   9.02.2015, 13:02:10
- - matrik   Jeśli chodzi o "Hello World!" to spe...   9.02.2015, 13:07:25
- - pyro   @matrik, jeżeli tak bardzo Ci zależy na milisekund...   9.02.2015, 13:15:31
- - !*!   14 postów w temacie, a Wy rozmawiacie o czymś co i...   9.02.2015, 13:19:40
|- - b4rt3kk   Cytat(!*! @ 9.02.2015, 13:19...   9.02.2015, 13:27:17
- - Pyton_000   Ojj tam @!*! Trzeba jakoś dzień odreagować...   9.02.2015, 13:25:58
- - matrik   Nie wiem co z tym... Wrzuciłem: smarty (wiem, że o...   9.02.2015, 13:41:53
- - Forti   Dawno nie widziałem takiego "nested if/else...   9.02.2015, 13:58:22
|- - matrik   Cytat(Forti @ 9.02.2015, 13:58:22 ) D...   9.02.2015, 14:06:53
- - !*!   Cytat(matrik @ 9.02.2015, 11:21:08 ) ...   9.02.2015, 14:16:45
- - by_ikar   Wszystko co jest za throw nie zostanie wykonane, t...   9.02.2015, 15:52:01
- - Pyton_000   @up Ba, ten kod który został pokazany można by był...   9.02.2015, 16:02:48
- - vokiel   Ok, skoro jest kod do review, to zrobię pobieżny (...   9.02.2015, 20:58:44
- - solificati   Cytat(matrik @ 9.02.2015, 11:21:08 ) ...   9.02.2015, 21:58:41
- - Neymar11   Cytat(matrik @ 9.02.2015, 11:21:08 ) ...   20.02.2015, 01:59:08
- - peter13135   Skoro kładziesz na lekkość, to po co w Twoim FW sm...   21.02.2015, 11:14:53


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 03:10