Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Framework tak dla poszerzenia wiedzy
Forum PHP.pl > Inne > Oceny
nivius
Witam,
jako że zawodowo od kilku lat zajmuje się PHP od czasu do czasu siadam do czegoś, od tak dla poszerzenia wiedzy z zakresu programowania. Od kilku lat planowałem napisać framework w i końcu się przemogłem przy okazji chciałem poznać torchę NAMESPACE. Framework tworzę raczej dla swoich potrzeb. I tutaj pytania do was:
1) Co sądzicie na temat mojego "dzieła"?
2) Co sądzicie na temat architektury?
3) Co byście zmienili?
4) Czy łatwo się w nim połapać?

Celowo dodaje framework z okrojoną dokumentacją kodu, poztym jest on w bardzo wczesnej fazie rozwoju dlatego nie ma tam zbyt wiele chciałbym usłyszeć opinię na temat samego mechanizmu (w przyszłości będzie wdrożony ORM, Twig i kilka bibliotek pomocniczych np. do wysyłania maili). Framework polecam odpalić s kilkoma parametrami http://adres/test/test1?get=1 (dla wypełnienia tablicy routing i get). Na tyle ile mogłem starałem się uciec od podobieństw do Synfony. Pozdrawiam i z niecierpliwością czekam na ocenę.


http://speedy.sh/rg9wu/se-0.4.zip
qrooel
https://github.com/
!*!
Cytat
Od kilku lat planowałem napisać framework w i końcu się przemogłem przy okazji chciałem poznać torchę NAMESPACE.

I to się chwali, tylko uważaj, zaraz zlecą się mapety z tekstem "po co, skoro już jest". A jeśli chcesz bardziej poznać NS, bo np. nie masz pojęcia dlaczego działają one w PHP tak a nie inaczej, popatrz jak to jest zrobione w GTK+ (przejrzyj tylko dokumentacje, nie musisz się zagłębiać), a wszytko się wyjaśni i stwierdzisz że PHP ma najprostszy mechanizm biggrin.gif

Cytat
Na tyle ile mogłem starałem się uciec od podobieństw do Synfony. Pozdrawiam i z niecierpliwością czekam na ocenę.

Z powodu?

Cytat
Framework polecam odpalić s kilkoma parametrami http://adres/test/test1?get=1 (dla wypełnienia tablicy routing i get).

Nigdy nie lubiłem mieszania, w ogóle używania getów... dlatego we własnym FW całkowicie z tego zrezygnowałem. Jak określasz routing?

Wrzuć to w wersji online + źródła na github.

ps. jest jakaś wersja online github np. lite? Czasami przeglądanie źródłem jest strasznie spowolnione (opcja wyłączenia JS już nie działa).
skowron-line
A skąd pomysł na JSON ?
nivius
JSON wybrałem z powodu prostoty, pozatym trąbi się dookoła że niedługo wszystko na JSON-ie będzie bo odchodzą od XML-a (głównie w przypadku małych rozwiązań). A uciekałem od symfony żeby nie mnożyć schematu. Ok wrzucę na githuba jak tylko znajdę chwilę czasu.
skowron-line
Jak już będzisz rozwijał swoj FW to postaraj się zrobić kilka driverów do obsługi różnych typów configu. (patrz. Zend)
nivius
Cytat(skowron-line @ 26.09.2012, 10:06:39 ) *
Jak już będzisz rozwijał swoj FW to postaraj się zrobić kilka driverów do obsługi różnych typów configu. (patrz. Zend)


Myślałem o tym żeby w przyszłości obsługiwał też XML-e i YML-e podobnie jak w przypadku innych FW.

Github: http://github.com/nivius/SparcEngine
podgląd: http://marcin.webframe.pl/

przypominam że nie ma tam za wiele.
!*!
- nie musisz kodu klasy obejmować w klamry{} gdy tworzysz namespace, wystarczy domknięcie

  1. namespace Core\Foo;


Przejrzałem kilka plików, trzymasz się PSR-0/1/2? I szczerze mówiąc to... nie widzę tam FW.

- korzystaj z spl loadera, a nie __autoload
- pliki konfiguracyjne zapisuj jako PHP. mysql.json zostanie odczytany jako plik tekstowy.

  1. <?php
  2. require_once('../core/Init.inc.php');
  3.  
  4. class Index extends Core{}
  5.  
  6. $index = new index();
  7. $index->configs->getConfig( 'Main', 'mysql' );
  8. $index->configs->getConfig( 'Main', 'systemConfig' );
  9. echo '<pre>';
  10. print_r( $index );
  11. echo '</pre>';
  12.  
  13. function convert($size)
  14. {
  15. $unit=array('b','kb','mb','gb','tb','pb');
  16. return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
  17. }
  18.  
  19. echo convert(memory_get_usage(true));


Tak ma wyglądać plik każdej aplikacji?

Nie nazwałbym tego FW, ale pracuj dalej. I popracuj też nad nazwami zmiennych, plików itd. W powyższym kodzie, nic mi nie mówi zmienna/klasa $index a rzekomo wczytuje CFG.
nivius
Cytat(!*! @ 26.09.2012, 11:02:15 ) *
- nie musisz kodu klasy obejmować w klamry{} gdy tworzysz namespace, wystarczy domknięcie

  1. namespace Core\Foo;


Przejrzałem kilka plików, trzymasz się PSR-0/1/2? I szczerze mówiąc to... nie widzę tam FW.

- korzystaj z spl loadera, a nie __autoload
- pliki konfiguracyjne zapisuj jako PHP. mysql.json zostanie odczytany jako plik tekstowy.

  1. <?php
  2. require_once('../core/Init.inc.php');
  3.  
  4. class Index extends Core{}
  5.  
  6. $index = new index();
  7. $index->configs->getConfig( 'Main', 'mysql' );
  8. $index->configs->getConfig( 'Main', 'systemConfig' );
  9. echo '<pre>';
  10. print_r( $index );
  11. echo '</pre>';
  12.  
  13. function convert($size)
  14. {
  15. $unit=array('b','kb','mb','gb','tb','pb');
  16. return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
  17. }
  18.  
  19. echo convert(memory_get_usage(true));


Tak ma wyglądać plik każdej aplikacji?

Nie nazwałbym tego FW, ale pracuj dalej. I popracuj też nad nazwami zmiennych, plików itd. W powyższym kodzie, nic mi nie mówi zmienna/klasa $index a rzekomo wczytuje CFG.


Nie aplikacje będą bardzo podobne do klas zawartych /core/, i będą one wywoływane na podstawie routingu. Tak zamierzam zrezygnować z autoload, a jesli chodzi o pliki json, to nie otworzysz ich ponieważ htaccess nie pozwala. Klasa index jest raczej przykładowa (dla potrzeb pokazania struktury )
!*!
Cytat(nivius @ 26.09.2012, 11:07:04 ) *
a jesli chodzi o pliki json, to nie otworzysz ich ponieważ htaccess nie pozwala

Czasami są przypadki gdzie takiego pliku nie ma i/lub nie może zostać utworzony, co wtedy? Narysuj główny trzon FW na kartce, i rób do niego dodatki, ale nie opieraj całego FW o nie same.
nivius
Cytat(!*! @ 26.09.2012, 11:13:48 ) *
Czasami są przypadki gdzie takiego pliku nie ma i/lub nie może zostać utworzony, co wtedy? Narysuj główny trzon FW na kartce, i rób do niego dodatki, ale nie opieraj całego FW o nie same.


Słuszna uwaga. Dzięki.
IceManSpy
W pliku Init.inc.php masz costakiego:
  1. if( file_exists( $path ) )
  2. {
  3. require_once( $path );
  4. }
  5. else
  6. {
  7. echo '<h3>Cannot load library.</h3>';
  8. }

Zamiast echo rzuć wyjatek.
Spawnm
Zamiast __autoload daj spl_autoload_register()

namespace Core\Data\Common bez sensu, get i post w niczym nie pomagają.

session_name('SparcEngine');
session_start();

Gdzie jakiekolwiek zabezpieczenie sesji?

Masa pustych folderów, trudno tu coś oceniać.
nivius
Cytat(IceManSpy @ 26.09.2012, 18:18:43 ) *
W pliku Init.inc.php masz costakiego:
  1. if( file_exists( $path ) )
  2. {
  3. require_once( $path );
  4. }
  5. else
  6. {
  7. echo '<h3>Cannot load library.</h3>';
  8. }

Zamiast echo rzuć wyjatek.


No właśnie nie mam pomysłu jak obsługiwać błędy czy osobno w każdej klasie czy w tylko wyrzucać wyjątek i obsługiwać go w indeksie? I czy spotkał się ktoś z was z czymś takim że jak się popełni błąd np. składni żeby obsłużyć go samemu a nie żeby się skrypt wysypywał?

Cytat(Spawnm @ 26.09.2012, 18:48:44 ) *
Zamiast __autoload daj spl_autoload_register()

namespace Core\Data\Common bez sensu, get i post w niczym nie pomagają.

session_name('SparcEngine');
session_start();

Gdzie jakiekolwiek zabezpieczenie sesji?

Masa pustych folderów, trudno tu coś oceniać.


No pisałem wyżej żę to bardzo wczesna wersja. Docelowa klasa get i post mają przechowywać zabezpieczone dane żeby uniknąć np. "wstrzyknięć". A co do pustych folderów wraz z rozwojem będę aktualizoswał na GH.
Niktoś
Cytat
No właśnie nie mam pomysłu jak obsługiwać błędy

Na powyższym przykładzie:
  1. try {
  2. if( ! file_exists( $path ) )
  3. {
  4. throw new Exception('Cannot load library.');
  5. }
  6. require_once( $path );
  7. }
  8. catch(Exception $e)
  9. { die ('Program stopped: ' . $e->getMessage());
  10. }
nivius
Cytat(Niktoś @ 26.09.2012, 19:08:45 ) *
Na powyższym przykładzie:
  1. try {
  2. if( ! file_exists( $path ) )
  3. {
  4. throw new Exception('Cannot load library.');
  5. }
  6. require_once( $path );
  7. }
  8. catch(Exception $e)
  9. { die ('Program stopped: ' . $e->getMessage());
  10. }


Hehe nie do końca o to mi chodziło. To jedna z opcji druga to taka że nie ma bloku try catch, tylko jest samo throw new Exception, a index posiada blok try catch
rzymek01
Żeby oceniać architekturę przydałyby się jakieś diagramy, schematy, nie będziemy przecież po źródłach patrzeć smile.gif
memory
Ja tam nic nie widzę, 2 klasy z 1,2 metodami smile.gif
nivius
Cytat(memory @ 27.09.2012, 14:05:39 ) *
Ja tam nic nie widzę, 2 klasy z 1,2 metodami smile.gif


No wyżej napisane że to dopiero początek.

Wstawiłem nowego gita, ten będzie aktualizowany:
https://github.com/nivius/SparcEngine-0.4
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.