Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

7 Stron V   1 2 3 > »   
Reply to this topicStart new topic
> jak pisac jadro ?
Balin
post 20.03.2004, 16:54:29
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 14.05.2003

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


Witam, ostatnio zastanawiam sie w jaki sposob napisac jadro systemu webowego w php - doszedlem do wniosku, ze najlepiej uzyc singletonow do tworzenia instancji klas (db, io, klasa sesji, szablonow itp.) czy jednak lepiej aby jadro bylo rozproszone (wiele klas, kazda posiadajaca metode instance() ) czy raczej napisac jeszcze jednak klase Kernela, ktora to klasa przechowywala by w sobie metody tworzenia instancji i instancje wszystkich podsystemow, oraz kontrolowala wszelkie proby uzyskania takiej instancji ?
Jestem ciekaw jak wy to widzicie ? w jaki sposob wy pisaliscie rdzen systemu ?
Go to the top of the page
+Quote Post
Bora
post 20.03.2004, 20:17:35
Post #2





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

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


Engone
|--Biblioteki
| |-Error
| |-DB (ja napisałem włąsną klase ale z składnią podobną do adodb)
| |-Sesje
| |-IO
| |-Smarty
| |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne)
|--Moduły (inicjowane przez engine)
|--Templates (przyjąłem zasade że domyślny plik ma taką samą nazwe jak moduł)
|--lang (łądowany domyślnie główny + z możiwością zainocjownaiania przez kernel pliku do modułu)

Wykorzystany singleten. Engine inicjuje wszystkie moduły przed zainicjowaniem sprawdza tylko uprawneinia. Wszelkie dane wysyąłnie do przeglądark (POST GET SESSION COOKIE) są przerabiaje przez odpowiedną klase dzięki czemu moge formuowac wąłsne linki np (index.php/modul/news/nr/1). Jest to snandardowy sposób ale działą popreawnie z chęcią sam poczytam jak można to innaczej rozwiązac.
Go to the top of the page
+Quote Post
MaKARON
post 21.03.2004, 10:46:57
Post #3





Grupa: Zarejestrowani
Postów: 114
Pomógł: 1
Dołączył: 17.07.2003

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


W tym zastosowaniu, to chyba kazdy ma swoj sposob i swoje pomysly.
Cytat
|  |-Error
Co u Ciebie robi ta klasa? Czy jest sens? Ja nie widze. Zwracam odpowiednie wartosci bool w kazdej metodzie swoich klas i dla funkcji/klas obslugujacych wygladu okreslam komunikaty.

Cytat
|  |-DB (ja napisałem włąsną klase ale z składnią podobną do adodb)
Hm... adodb i tak jest szybkie... i tylko przy na prawde obciazonych systemach jest sesns ja modyfikowac (to dla innych).

Cytat
|  |-Smarty

Proponuje klase dziedziczaca - chocby po to, zeby ulatwic sobie wyswietlanie. Do wyswietlenia malej tabelki z komunikatem wystarczy wtedy $mySmarty->Komunikat("Tytul","Tresc") i nie trzeba wszedzie kojarzyc zmiennych smile.gif

Cytat
|  |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne)
questionmark.gif Nie wiem co to smile.gif

Cytat
|--Moduły  (inicjowane przez engine)
Ja mam takie sposob wywolania modulu, ze ustawiam go na podstwie adresu (jak podales nizej) - pierwszy parametr po okreslonym jest nazwa modulu, pozniej nazwa funkcji itd itp. (dodatkowo jest ograniczenie na metody ktore moga byc wywolywane).

Cytat
|--Templates (przyjąłem zasade że domyślny plik ma taką samą nazwe jak moduł)
Ja zas zasade, ze jest domyslna funkcja, a nie plik szablonu. Jest to wygodniejsze, bo ona juz sobie zadecyduje co robic.

Cytat
|--lang (łądowany domyślnie główny + z możiwością zainocjownaiania przez kernel pliku do modułu)
Jezeli korzystasz ze smarty to mozna wykorzystac .conf do robienia wersji jezykowych. Szybko latwo i skutecznie. Wiem, ze mozna by to przyspieszyc... ale tak mozna mowic o wszystkim. Kiedys optymalizowalismy na zajeciach petle for!!! smile.gif /i nie zartuje z ta petla smile.gif /

Cytat
Engine inicjuje wszystkie moduły przed zainicjowaniem sprawdza tylko uprawneinia.

A czemu wszystkie? Proponuje inne rozwiazanie. Iniciuje tylko ten wykorzystywan, a do wspolpracy z innymi proponuje system zdarzen. Moduly podlaczaja sie do zdarzen, ktore wywoluja (uwalniaja, powoduja) inne moduly - tak wspolpracuja tylko te, ktore sa potrzebne w danej stronie.

Cytat
Wszelkie dane wysyąłnie do przeglądark (POST GET SESSION COOKIE) są przerabiaje przez odpowiedną klase dzięki czemu moge formuowac wąłsne linki np (index.php/modul/news/nr/1).

Troche innaczej to zrobilem (mod_rewrite). Wywolania wszystkich nieistniejeacych plikow sa przekierowywane do index.php, on sprawdza to tak jak u Ciebie. Czemu nieistniejace? Musze jakos wyslac do przegladarki obrazki i CSS'y tongue.gif

Pozdrawiam!
Go to the top of the page
+Quote Post
Bora
post 21.03.2004, 11:43:03
Post #4





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

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


[quote]
[quote]
|  |-Error
[/quote] Co u Ciebie robi ta klasa?
[/quote]
Ma ona za zasade obsługe błedów czyli zbieranie dodatkowych informacji (debug_backtrace()) sprawdza poziom błędu i w zależności od niego decyduje czy dalej ma być przetwarzany engine.
[quote]
[quote]
|  |-DB (ja napisałem włąsną klase ale z składnią podobną do adodb)
[/quote] Hm... adodb i tak jest szybkie... i tylko przy na prawde obciazonych systemach jest sesns ja modyfikowac (to dla innych).
[/quote]
Odpalenie adodb to tylko zmiana jednej linijki. Ta klasa powstała raczej jako rozgrzewka przed pisaniem engine'u
[quote]
[quote]
|  |-Smarty
[/quote]
Proponuje klase dziedziczaca - chocby po to, zeby ulatwic sobie wyswietlanie. Do wyswietlenia malej tabelki z komunikatem wystarczy wtedy $mySmarty->Komunikat("Tytul","Tresc") i nie trzeba wszedzie kojarzyc zmiennych smile.gif
[/quote]
hmm ciekawe, trzeba będzie sprawdzić smile.gif
[quote]
[quote]
|  |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne)
[/quote] questionmark.gif Nie wiem co to smile.gif
[/quote] Dugo sie nad tym zastanawiałem czy potrzeba. Czyli jednak jedt to zbędne.
[quote]
|--Moduły  (inicjowane przez engine)
[quote]
[/quote] Ja mam takie sposob wywolania modulu, ze ustawiam go na podstwie adresu (jak podales nizej) - pierwszy parametr po okreslonym jest nazwa modulu, pozniej nazwa funkcji itd itp. (dodatkowo jest ograniczenie na metody ktore moga byc wywolywane).
[/quote]
Sorrka zę sformuowałem. Mam klase sprawdzającą uprawnienia acces. Ma ona za zadanie sprawdzić uprawneinia a w przypadku braku modułu albo braku uprawniem przekierowanie na odpowiedni domyślny lub logowanie.
Schemat klas wyglada tak:
Kod
Engine

|--Biblioteki

| |-Error

| |-DB

| |-Acces

| |-Sesje

| |-IO

| |-Smarty

|-Page


[quote]
[quote]
|--Templates (przyjąłem zasade że domyślny plik ma taką samą nazwe jak moduł)
[/quote] Ja zas zasade, ze jest domyslna funkcja, a nie plik szablonu. Jest to wygodniejsze, bo ona juz sobie zadecyduje co robic.
[/quote] To jest katalog z plikami modułów. Schemat przedstawia bardziej rozmieszczenie plików.
[quote]
[quote]
|--lang (łądowany domyślnie główny + z możiwością zainocjownaiania przez kernel pliku do modułu)
[/quote] Jezeli korzystasz ze smarty to mozna wykorzystac .conf do robienia wersji jezykowych. Szybko latwo i skutecznie. Wiem, ze mozna by to przyspieszyc... ale tak mozna mowic o wszystkim. Kiedys optymalizowalismy na zajeciach petle for!!! smile.gif /i nie zartuje z ta petla smile.gif /
[/quote] Kolejna rzecz do przemyślenia
[quote]
[quote]
Engine inicjuje wszystkie moduły przed zainicjowaniem sprawdza tylko uprawneinia.[/quote]
A czemu wszystkie? Proponuje inne rozwiazanie. Iniciuje tylko ten wykorzystywan, a do wspolpracy z innymi proponuje system zdarzen. Moduly podlaczaja sie do zdarzen, ktore wywoluja (uwalniaja, powoduja) inne moduly - tak wspolpracuja tylko te, ktore sa potrzebne w danej stronie.
[/quote] Żle sie wyraziłem oczywiście tyko wybrany który otrzymna od klasy acces..

Wielkie dzięi za krytyke i wskazówki. Kiedyś na forum był artykuł jak to miało wyglądać w vortalu php.pl ale niestety nie mogłem znależć.
Go to the top of the page
+Quote Post
Ozzy
post 21.03.2004, 15:03:22
Post #5





Grupa: Zarejestrowani
Postów: 204
Pomógł: 0
Dołączył: 26.12.2003
Skąd: Rzeszów

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


Cytat
Troche innaczej to zrobilem (mod_rewrite).


A koledze nie pomożesz? sad.gif
Go to the top of the page
+Quote Post
MaKARON
post 21.03.2004, 20:18:15
Post #6





Grupa: Zarejestrowani
Postów: 114
Pomógł: 1
Dołączył: 17.07.2003

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


Zajrzyj do tamego tematu, troche tam wkleilem.

Cytat
Ma ona za zasade obsługe błedów czyli zbieranie dodatkowych informacji (debug_backtrace()) sprawdza poziom błędu i w zależności od niego decyduje czy dalej ma być przetwarzany engine.

To chyba ma sens tylko w przypadku rozwoju aplikacji...

Cytat
Odpalenie adodb to tylko zmiana jednej linijki. Ta klasa powstała raczej jako rozgrzewka przed pisaniem engine'u

Mialem ochote kiedys napisac taka miniadodbmysql - dla zastosowan juz na serwer. Zrezygnowac ze wszystkiego co jest mozliwe - a do rozwoju uzywac ado. Mozesz to podeslac?

Cytat
Sorrka zę sformuowałem. Mam klase sprawdzającą uprawnienia acces. Ma ona za zadanie sprawdzić uprawneinia a w przypadku braku modułu albo braku uprawniem przekierowanie na odpowiedni domyślny lub logowanie.

A jak masz zrealizowane uprawnienia?

Cytat
Kolejna rzecz do przemyślenia

Myślę, ze warta, bo jezeli dobrze to jeszcze pogrupowac albo 'rozmodulowac' - czyli dla kazdego modulu osobny plik.. to byloby latwe w tlumaczeniu.
Go to the top of the page
+Quote Post
ebe
post 21.03.2004, 23:41:06
Post #7





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

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


Cytat
A jak masz zrealizowane uprawnienia?


Dołączam do pytania, bardzo mnie to ciekawi i myślę od kilku dni nad tym.
Go to the top of the page
+Quote Post
MaKARON
post 22.03.2004, 14:53:05
Post #8





Grupa: Zarejestrowani
Postów: 114
Pomógł: 1
Dołączył: 17.07.2003

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


A Ty co wymysliles/jak to zaplanowales?
Go to the top of the page
+Quote Post
Balin
post 22.03.2004, 16:54:04
Post #9





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 14.05.2003

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


ciekawe jest to co piszecie, ale nadal nie wiem czy jestescie za centralizacja czy decentralizacja jadra, czy u waz jadro to po prostu zbior kilku klas inicjowanych juz w skrypcie, czy odrebna klasa, ktora sama inicjuje te wszystkie klasy podsystemow ?
Go to the top of the page
+Quote Post
Ace
post 22.03.2004, 18:16:54
Post #10





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


ja raczej skoncentrowalem sie nad tym, zeby napisac jedna klase, ktora bedzie odpowiadala za tworzenie innych klas, czyli inicjowanie nowych modulow.
Go to the top of the page
+Quote Post
maulus
post 22.03.2004, 20:18:45
Post #11





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 15.12.2003

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


a właściwie co wżucacie do jądra za co są tam odpowiedzialne classy


--------------------
gg:5216061
Warsztat: Win XP HE | Apache - 2.0.49 | PHP - 5 RC | MySQL - 4.0.18 | Narzędzia: WinSyntax
Artykyłu v0.2beta[b]lllllllllllllllllllllllll 100%
Go to the top of the page
+Quote Post
Balin
post 22.03.2004, 20:27:38
Post #12





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 14.05.2003

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


na pewno takie klasy jak:
config
input/output
baza danych
sesje (jesli nie kozystasz z tych wbudowanych)
templates
Jenym slowem takie podstawowe klasy bez ktorych nie moze dzialac zadna czesc systemu, pozniej na ich podstawie buduje sie taki sterownik, ktory zarzadza żądaniami i na ich podstawie odpala odpowiednie moduly itp.
Go to the top of the page
+Quote Post
MaKARON
post 22.03.2004, 22:07:26
Post #13





Grupa: Zarejestrowani
Postów: 114
Pomógł: 1
Dołączył: 17.07.2003

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


Cytat
ja raczej skoncentrowalem sie nad tym, zeby napisac jedna klase, ktora bedzie odpowiadala za tworzenie innych klas, czyli inicjowanie nowych modulow.
Tak, ale jest jeszcze wyswietlanie, wersje jezykowe, rozne bazy danych, programowanie zdarzeniowe, cachowanie, SHM i wiele innych rzeczy... nie wepchniesz wszystkiego w jedno miejsce. Czasem trzeba robic klasy, ktore dopiero obsluguja klasy dziedziczace po abstrakcyjnych smile.gif W sumie to i tak cieszcie sie smile.gif ostatnio siedze w j2me i mimo ze jest to micro to mnie zaczyna draznic ilosc klas i polaczen miedzy nimi, a do tego interfacy i inne duperle tongue.gif ... no ale w koncu bede mogl grac na swoich gierkach smile.gif
Go to the top of the page
+Quote Post
Ace
post 22.03.2004, 23:41:21
Post #14





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


Makaron : ok rozumiem, ale w moim przypadku ogranicza sie to do kilku klas, lecz dopiero co zaczynam tworzyc system CMS, pisze silnik, ktory ma za zadanie tworzyc moduly, wykorzystac je w dzialaniu, kilka wbudowanych modulow np : user register, lub profil, klasa dotyczaca uprawnien danego urzytkownika. Narazie nie zastanawiam sie nad wersjami jezykowymi, cachowanie mam zrobione w swoim autorskim systemie szablonow, lecz on ma jeszcze jedna wade, funkcjia warunkowa... wiec gdyby nie to, to w moim szablonie byl by support dla smarty i AcEmplates ;] co do wersji jezykowej, to dodam ja gdy zrobie panel administracyjny... chodz do kazdego modulu oddzielnie bede musial robic wersje jezykowa, to moze teraz zaczne... Ale dla db nie przewiduje innej bazy niz mysql. Wiec akurat moje myslenie okresla sie do czegos malego na poczatek, z czasem moze napisze cos bardziej rozbudowanego. W chwili obecnej to sa moje ambicje.
Go to the top of the page
+Quote Post
MaKARON
post 24.03.2004, 14:10:27
Post #15





Grupa: Zarejestrowani
Postów: 114
Pomógł: 1
Dołączył: 17.07.2003

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


Nie pozostało nic, tylko życzyć wytrwałości i czekać na publikację wyników!
Go to the top of the page
+Quote Post
Bora
post 25.03.2004, 13:16:13
Post #16





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

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


ja stworzyłem jedną główną klase zarządzającą wszystkim i łączącą to w całość. Bardzo przydatne są singleton'y dzięki nim sie ięknie pisze moduły.
Przykłąd:
[php:1:675cf4027c]<?php
class news {
/**
* news::news()
*
* Konstruktor
*/
function news() {
$this -> error = &engine::getInstance('error');
$this -> db = &DB::get_DB();
$this -> io = &engine::getInstance('io');
?>[/php:1:675cf4027c]
Dodatkowo wykorzystałem stos zapisujący strony gdzie sie chciał dostać odwiedzający i nie miał uprawnień. Dzięki temu zaraz po zalogowanu wraca na te strony.
Uprawnienia są sprawdzane jescze przed odpaleniem modułu wszystko prawa są przechowywane w bazie mysql. Brak uprawnień dla jakiejś grupy użytkowników powoduje przydzienienie domyślnych.
Go to the top of the page
+Quote Post
Strz@łka
post 1.04.2004, 19:52:05
Post #17





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.03.2004

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


No to teraz ja zadam wam pytanie. Jak już pisać jądro to jak questionmark.gif Obiektowo (klasy) czy nie ?
Go to the top of the page
+Quote Post
kwiateek
post 1.04.2004, 19:56:44
Post #18





Grupa: Zarejestrowani
Postów: 223
Pomógł: 0
Dołączył: 13.01.2003
Skąd: 3rd ball of mud behind a big ball of burning gas

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


Cytat
No to teraz ja zadam wam pytanie. Jak już pisać jądro to jak questionmark.gif Obiektowo (klasy) czy nie ?

Nie wyobrażam sobie pisania jądra nie używając klas.

Pozdrawiam.


--------------------
It's Time to Join the PLD Linux Generation!
<? while (!$success) { $try++; } ?>
Go to the top of the page
+Quote Post
halfik
post 1.04.2004, 20:23:42
Post #19





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

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


Panowie debatujecie tutaj na temat jądra - i dobrze, temat cokolwiek ciekawy. Ale dlaczego nikt nie wspomni w temacie, że jądra jako takiego pisać nie trzeba, aby stworzyć dobry, stabilny system. Dlaczego nikt nie poruszy tutaj tematu zalet jakie niesie ze sobą napisanie jądra, problemów z tym związanych i w drugą stronę: co się stanie jeśli napiszemy system średnich rozmiarów (no np. od 10 tys. linii kodu w zwyż) bez konkretnej klasy zarzadzającej itd. ? Myślę, że temat na tym poziomie może być równie ciekawy jak zagadnienei "jak pisać jądro"?

P.S Jądro należy pisać z głową winksmiley.jpg
Go to the top of the page
+Quote Post
jaco
post 1.04.2004, 20:35:58
Post #20





Grupa: Zarejestrowani
Postów: 115
Pomógł: 1
Dołączył: 15.01.2003

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


Cytat
co się stanie jeśli napiszemy system średnich rozmiarów (no np. od 10 tys. linii kodu w zwyż) bez konkretnej klasy zarzadzającej itd. ?


Hmm - nic sie nie stanie smile.gif moim zdaniem silink / jadro aplikacji webowej to ma byc cos co ulatwi nam pisanie modulow (ograniczenie ich do kodu czysto spelniajacego zadanie - reszte powinen realizowac wspomniany silnik).

Dla mnie musi to byc wygodne - w swoim robie sobie coraz wiecej udogodnien i coraz wygodniej mi sie tworzy (np. wczoraj napisalem cos na wzor rejestru windows w dosyc nietypowy sposob - ulatwia mi to zapis konfiguracji itp. do granic mozliwosci!).

Bardzo wazny jest tez czas generowania, co za tym idzie ograniczenie liczby zapytan, uzywanie static przy powtornych wywolaniach niektorych funkcji (po co wysylac zapytanie drugi i nty raz?).
Go to the top of the page
+Quote Post

7 Stron V   1 2 3 > » 
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.10.2024 - 23:54