Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Framework tak dla poszerzenia wiedzy
nivius
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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
Go to the top of the page
+Quote Post
qrooel
post
Post #2





Grupa: Zarejestrowani
Postów: 306
Pomógł: 42
Dołączył: 25.03.2010
Skąd: Kraków

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


https://github.com/

Ten post edytował qrooel 26.09.2012, 01:26:37
Go to the top of the page
+Quote Post
!*!
post
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


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 (IMG:style_emoticons/default/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).

Ten post edytował !*! 26.09.2012, 07:43:56
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


A skąd pomysł na JSON ?
Go to the top of the page
+Quote Post
nivius
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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.
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Jak już będzisz rozwijał swoj FW to postaraj się zrobić kilka driverów do obsługi różnych typów configu. (patrz. Zend)
Go to the top of the page
+Quote Post
nivius
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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.
Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


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

Ten post edytował !*! 26.09.2012, 10:03:40
Go to the top of the page
+Quote Post
nivius
post
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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 )

Ten post edytował nivius 26.09.2012, 10:10:20
Go to the top of the page
+Quote Post
!*!
post
Post #10





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


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.

Ten post edytował !*! 26.09.2012, 10:14:50
Go to the top of the page
+Quote Post
nivius
post
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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.
Go to the top of the page
+Quote Post
IceManSpy
post
Post #12





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
Spawnm
post
Post #13





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




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ć.
Go to the top of the page
+Quote Post
nivius
post
Post #14





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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.
Go to the top of the page
+Quote Post
Niktoś
post
Post #15





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


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. }
Go to the top of the page
+Quote Post
nivius
post
Post #16





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


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
Go to the top of the page
+Quote Post
rzymek01
post
Post #17





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


Żeby oceniać architekturę przydałyby się jakieś diagramy, schematy, nie będziemy przecież po źródłach patrzeć (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
memory
post
Post #18





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


Ja tam nic nie widzę, 2 klasy z 1,2 metodami (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nivius
post
Post #19





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 26.09.2012

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


Cytat(memory @ 27.09.2012, 14:05:39 ) *
Ja tam nic nie widzę, 2 klasy z 1,2 metodami (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post

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: 30.09.2025 - 20:13