jak pisac jadro ? |
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.
jak pisac jadro ? |
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 ? |
|
|
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. |
|
|
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 Cytat | |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne) Nie wiem co to
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!!! /i nie zartuje z ta petla /
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 Pozdrawiam! |
|
|
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 [/quote] hmm ciekawe, trzeba będzie sprawdzić [quote] [quote] | |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne) [/quote] Nie wiem co to [/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!!! /i nie zartuje z ta petla / [/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żć. |
|
|
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%) |
|
|
|
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. |
|
|
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. |
|
|
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?
|
|
|
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 ?
|
|
|
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.
|
|
|
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% |
|
|
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. |
|
|
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 W sumie to i tak cieszcie sie 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 ... no ale w koncu bede mogl grac na swoich gierkach
|
|
|
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.
|
|
|
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!
|
|
|
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. |
|
|
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 Obiektowo (klasy) czy nie ?
|
|
|
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 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++; } ?> |
|
|
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%) |
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ą |
|
|
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 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?). |
|
|
Wersja Lo-Fi | Aktualny czas: 31.10.2024 - 23:54 |