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.

> jak pisac jadro ?
Balin
post
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
7 Stron V   1 2 3 > »   
Start new topic
Odpowiedzi (1 - 99)
Bora
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
|  |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne)
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Nie wiem co to (IMG:http://forum.php.pl/style_emoticons/default/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!!! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) /i nie zartuje z ta petla (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Pozdrawiam!
Go to the top of the page
+Quote Post
Bora
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
[/quote]
hmm ciekawe, trzeba będzie sprawdzić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
[quote]
[quote]
|  |-Page (includje moduł dzięki temu że ina klasa niż kernel dane są w pewnym stopniu bezpieczne)
[/quote] (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Nie wiem co to (IMG:http://forum.php.pl/style_emoticons/default/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!!! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) /i nie zartuje z ta petla (IMG:http://forum.php.pl/style_emoticons/default/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
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? (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
MaKARON
post
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
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
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
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
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
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
Go to the top of the page
+Quote Post
Balin
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W sumie to i tak cieszcie sie (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ... no ale w koncu bede mogl grac na swoich gierkach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Ace
post
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
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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Obiektowo (klasy) czy nie ?
Go to the top of the page
+Quote Post
kwiateek
post
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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Obiektowo (klasy) czy nie ?

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

Pozdrawiam.
Go to the top of the page
+Quote Post
halfik
post
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ą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
jaco
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
halfik
post
Post #21





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

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


Cytat
A ja jak najbardziej chociaz lepiej chocby objac funkcje w klase by uniknac konfliktow nazw...

Naturalnie, że kodowanie obiektowe niesie ze soba wielkei możliwości i jedną z nich jest ta o której wspominasz. Naturalne jest, że napisać jądro jak i sam serwis prościej bedzie w OOP, bo tutaj łatwiej utrzymać pewną hierarchię, zależności itd. - czytelność, zwięzłość kodu etc. Z drugiej jednak strony: wszyscy wiemy, że bez php 5 nie mamy prawdziwego OOP - pozsotaje nam tylko czekać z nadzieją na powiększenie możliwości, które i tak są ogromne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
robert_b
post
Post #22





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 21.11.2003
Skąd: Gdynia

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


Wow!!!
Ale wy wszyscy jesteście mądrzy! Chyba źle trafiłem...
Ale będę się uczył i niedługo też sobie napiszę "jądro" albo nawet dwa!! :wink:
Go to the top of the page
+Quote Post
Sh4dow
post
Post #23





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


no dobra temu panu juz podziekujemy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Joke !

A tak wracajac do sprawy. To nie do konca musze sie zgodzi z wami jesli chodzi o oop. Nie mowie ze nie ma wielu zalet, ale jesli chodzi mi o ta czytelnosc którą tutaj tak chwalicie. Czytelnosc kodu nie zalezy od sposobu pisania, ale od samego piszącego.
Wlasnie skonczylem pisać swoj silnik do strony. Z paroma modulami zajelo mi to miesiac. caly slilnik jest rozplanowany w 4 podstawowe pliki i katalog z bibliotek wspomagajacych. Wszystko napisanie strukturalnie i moim zdaniem jest w miare przejzysty pomimo paru braków w komentarzach. oczywiscie wykozystuje pare mniejszych klas w niektorych miejscach, ale ogolnie kod jest czytelny. Ale to jest moje osobiste zdanie.
Go to the top of the page
+Quote Post
halfik
post
Post #24





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

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


Cytat
Wlasnie skonczylem pisać swoj silnik do strony. Z paroma modulami zajelo mi to miesiac. caly slilnik jest rozplanowany w 4 podstawowe pliki i katalog z bibliotek wspomagajacych. Wszystko napisanie strukturalnie i moim zdaniem jest w miare przejzysty pomimo paru braków w komentarzach. oczywiscie wykozystuje pare mniejszych klas w niektorych miejscach, ale ogolnie kod jest czytelny. Ale to jest moje osobiste zdanie.

Owszem, to czy kod będzie czytelny w dużej mierze zależy od kodera. aLe nam akurat nie o to chodziło. Srpawa jest taka, że patrząc na kod w OOP po prostu czytasz co tam jest napisane np. patrzysz news->dodaj($tresc) - wiadomo co to robi. wiadomo też ze jeśli zechcesz usunąc newsa to będzie odpowiednia metoda w klasie news itd. A przy kodowaniu strukturalnym musisz poszukać, sprqawdzić która funkcaj jest od czego. Choć można tutaj oszedzić używając odp. nazw np. addNews($text) itd. jednak to nie będzie ta sama przejrzystośc kodu. Sam w PHPie po dziś dziań koduje strukturalnie, mój site cały jest strukturalny - wyjątek to kalsy SMARTY - i kod jest czytelny na ile to możliwe. Zawsze jest skrypt głowny od doczepia pliki konfiguracyjne, pliki funkcyjne, a sam dba tylko o sprawdzanie warunków, wywoływanie odp. funkcji, przekazywanie wyników gdzie trzeba oraz przypisywanie wartości do zm. szablonowych itd. Także mam osobny katalog na funkcje, osobny na szablony, osobny na konfigi do szablonów, osobny na konfigi do skryptów itd. - mimo wszystko to nie to samo co można uzyskać dzięki OOP.
Go to the top of the page
+Quote Post
jaco
post
Post #25





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

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


Ja tez nie koduje obiektowo, narazie badam (dla mnie) nowy teren - wiedza juz jakas jest, teraz raczej zastanawiam nad samym zastosowaniem.

Dziedziczenie - napewno przydatna zabawka (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jak narazie uczytelniam swoj kod do postaci news::add($tresc) (wzorujac sie na przykledzie przedmowcy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ).

Cieszy mnie rowniez takie rozwiazanie bo licznik czasu generowania na to nie reaguje, gdy stworze obiekt jest juz spora roznica (w tym momencie system wysyla 7-10 zapytan na strone, jest juz mocno rozbudowany i generuje sie okolo 0,02s - wlasciwie to co zwalnia to zapytania i obiekty - z zapytaniami sobie poradzilem (np. pre ladowanie danych i zapis w zmiennej globalnej - moduly, biblioteki, userzy - dalej nie ma juz zadnych zapytan zwiazanych z tymi danymi)
Go to the top of the page
+Quote Post
halfik
post
Post #26





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

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


Cytat
Dziedziczenie - napewno przydatna zabawka (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Jak narazie uczytelniam swoj kod do postaci news::add($tresc) (wzorujac sie na przykledzie przedmowcy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ).

Ja tam wolę określenie mechanizm (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) A tak na serio do tematu: pawdziwe zabawki dostaniemy dopiero z pojawieniem się 5, z tego co się przyglądałem wnioskuje, że wzorcem była tutaj JAVA. Obecnie morduje "Thinking in JAVA" B.Eckela i naprawde niezłe jazdy można robić w pełnym OOP (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

P.S Ktoś na forum pisał, że gdzieś tam w PHPie do czegoś tam używał Singletonu - ciekawi mnie jak, bo bez modyfikatorów dostępu nie da się zrobić czystego Singletonu, a uzycie w tym celu sztucznego licznika obiektów to raczej nie to samo...

Inna sprawa: ciekwe o ile po wejściu 5, skrypty napisane w OOP będą wolniejsze od ich odowiednich kodowanych strukturalnie?
Go to the top of the page
+Quote Post
seaquest
post
Post #27





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


@jaco: ale jak rozwiązujesz problem kiedy potrzebne ci jest kilka obiektów jednej klasy...
to mnie ciekawi, bo robie CMS'a pod php 4 i 5. I mam zamiar zrobić ładowanie osobnych sterowników do bazy (SQLite - tylko dla PHP5, MySQL, MySQLi oraz Postgree) i to mogą być klasy oparte na singletonach, ale np. klasa FormGenerator musi mieć stworzonych czasem kilka instancji, a zastosowanie wtedy zmiennych i metod statycznych staje się po prostu niemożliwe.
Go to the top of the page
+Quote Post
Balin
post
Post #28





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

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


Wiec nie tworz metod statycznych - stworz obiekt, z 1 metoda statyczna obj::GetInstance() i skladowa statyczna static private $Instance, jesli bedziesz chcial odwolac sie do istniejacej instancji obiektu wywolasz metode obj::GetInstance, ktora sprawdzi czy istnieje juz instancja tego obiektu i zwroci ja.
A jesli bediesz chcial utworzyc nowy egzemplaz obiektu skozystasz z new.
Go to the top of the page
+Quote Post
seaquest
post
Post #29





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Balin wogule mnie nie zrozumiałeś. Chodzi mi o to, że jaco pokazał że korzysta ze zmiennych i metod statycznych. A ja się pytałem jak rozwiązuje to w klasach, w których potrzebne mu kilka obiektów...
Go to the top of the page
+Quote Post
hawk
post
Post #30





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


@Balin: To złe rozwiązanie. Bo którą instancję ma zwrócić getInstance()? Przy kilku istniejących instancjach to bez sensu, bo musi być jedna wyróżniona instancja, więc po co inne?

@seaquest: IMHO jeżeli potrzbujesz kilku instancji klasy to singleton po prostu nie pasuje i tyle. W twoim przypadku każda klasa, która używa tego FormGeneratora, musi wiedzieć, której akurat instancji używa - więc musi mieć referencję do tej instancji (albo jakiś inny dostęp do tej właśnie referencji). To po co jej dodatkowo singleton?
Go to the top of the page
+Quote Post
jaco
post
Post #31





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

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


Cytat
ale jak rozwiązujesz problem kiedy potrzebne ci jest kilka obiektów jednej klasy...


Nie ma takiej sytuacji bo to co ja robie nie ma nic wspolnego z OOP (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ja poprostu wkladam kod silnika w klase aby uniknac konfluktu nazw, jak narazie jestem baaardzo zadowolony z wynikow - jak wspominalem nie znam do konca zalet programowania obiektowego i jakos nie potrafie sie do tego przekonac jak widze czas generowania strony - narazie nie odpowiada mi wspolczynnik predkosci do zalet (moze dlatego, ze do konca ich nie znam).
Go to the top of the page
+Quote Post
DeyV
post
Post #32





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




A ja, tak może nieco OT, powiem, ze nie rozumiem ludzi, którzy zarzekają się, ze nie będą pisać w OOP, ponieważ jest to 'wolne'.

Na poparcie swojego stwierdzenia przytoczę przykład konkursu programistycznego z przed jakiegoś roku, polegającego na napisaniu jakiegoś złozonego algorytmu operującego na kartach do gry w php.

Ocenie podlegało to, by skrypt a) robił to co ma zrobić (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) działał jak najszybciej.

Zadanie spotkało się ze sporym odzewem, tym bardziej, że nagroda była całkiem ciekawa (chyba Zend Studio i jakieś spore konto www)
Pojawilo się wiec bardzo dużo rozwiazań.
Ludzie też bardzo poważnie potraktowali zagadniania przyśpieszania skryptó. Widziałem nawet kod, który był napisany bez żadnych dodaktowych spacji, oraz znaków nowych lini, aby.. działał jak najszybciej.

Co ciekawe jednak - wygrał skrytp napisany supełnie inaczej.
Był to zresztą chyba kod chłopaka z Polski, kod napisany w pełni w oparciu o OOP, wraz z dokładnymi komentarzami oraz pięknie sformatowanym kodem.

A żeby było jeszce śmieszniej - kod ten wykonywał się od 5 do 50 razy szybciej, niż rozwiazania konkurencyjne, napisane oczywiście strukturalnie .

Może jest to nieco skrajny przypadek, ponieważ nie ma wątpliwości, że ten sam agorytm napisany przy wykorzystaniu OOP, i strukturalnie, zawsze będzie minimalnie szybszyw tym 2 przypadku.
Są to jednak na tyle minimalne różnice, że tak naprawdę nie powinno się o nich wspominać.
Czasem co najwyżej pojawia się inny problem. Pisząć obiektowo, znacznie łatwiej zapomnieć o bagarzu kodu, który pociąga uruchomienie naszej aplikacji. W kodzie strukturalnym jesteśmy zmuszeni do ciągłego przglądania kodu, co skłania nas do cpytamalizawania go (choćby dlatego, by mniej go przepisywać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )
Korzystając z przygotowanych wcześniej klas znacznie łatwiej o tym zapomnieć.
Ale w takim przypadku - problem tkwi nie w budowie php, albo w filozofi OOP, a w ... programiście. (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)
Go to the top of the page
+Quote Post
jaco
post
Post #33





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

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


Cytat
A ja, tak może nieco OT, powiem, ze nie rozumiem ludzi, którzy zarzekają się, ze nie będą pisać w OOP, ponieważ jest to 'wolne'.


Ja tego nie robie i jestem swiadom, ze to problem mojej osoby (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Poprostu za malo znam te technike (nie da sie ukryc, ze dla zaczynajacego jest troche zawila) zeby odrazu pisac na nowo, obiektowo gdy praktycznie zakonczylem prace nad platforma systemu - napisanego strukturalnie oczywiscie.

Zreszta wcale nie przeszkadza to w zrobieniu hybrydy, silnik dziala niezaleznie od modulu zas API moze byc klasa (tego bedzie uzywac programista piszacy modul).
Go to the top of the page
+Quote Post
KirkoR
post
Post #34





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

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


Można gdzieś znaleźć na necie do ściągnięcia taki Engine. Tzn. architekturę na któej można opierać swoje apliacjie? Jesli tak to prosze o linki.
Go to the top of the page
+Quote Post
marcin96
post
Post #35





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.08.2003
Skąd: Będzin

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


poczytaj sobie o tym:

http://www.php.pl/index.php/phppl/artyku_y...wadzenie_do_mvc

..na końcu Hawk podał kilka różnych frameworków opartych o wzorzec MVC (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) )
Go to the top of the page
+Quote Post
Ace
post
Post #36





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

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


Ja mam pytanie z innej beczki. Mianowicie, czy przechowywanie danych w tablicy zmiennych globalnych $GLOBALS jest dobrym rozwiazaniem ? ma to jakies przeciwskazania ? Przy pisaniu silnika bardzo latwo dodaje moduly, tworze z nich referencje, nie musze miec dodatkowych klas czy funkcji ktore zwracaja mi referencje, tylko odwoluje sie bezposrednio do zmiennych/obiektow/tablic ktore znajduja sie w zbiorze tablic globalnych...
np:
[php:1:6c9a871414]<?php
class silnik
{
function login()
{
if ( $login == $wynik['login'] && $haslo == $wynik['haslo'] )
$GLOBALS['_USER']['login'] = $login;
$GLOBALS['_USER']['access'] = $access;
}

}
?>[/php:1:6c9a871414]

a w innej czesci silnika daje np:
[php:1:6c9a871414]<?php

// ...

if ( $GLOBALS['_USER']['access'] > '2' )
echo 'masz dostep do panelu administracyjnego';

// ...

?>[/php:1:6c9a871414]

co myslicie o takim rozwiazaniu ?
Go to the top of the page
+Quote Post
hawk
post
Post #37





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


1. Jest nieobiektowe (ale to sam wiesz...)

2. Sypie się, gdy developerów jest więcej, bo jeden nie wie gdzie co wstawił drugi, a obiekt jednak ma swój interfejs i łatwiej jest zorientować się jak się do tego dostać.

3. Może się sypać, gdy nie tylko ty masz taki pomysł, ale też twórca drivera do bazy danych, systemu szablonów, itd. i pechowo 2 ludzi wybierze sobie te same nazwy -> wtedy systemy są całkowicie niekombatybilne.

4. Mało modyfikowalne. Jak już masz to zaimplementowane to zmiana rozwala cały kod. A np. treść metody możesz wymienić, byleby tylko dalej zwracała co trzeba.

5. Mało dokumentowalne. Jak masz metodę getLogin() to dokumentacja tego jest prosta. Ale jak masz tablicę w $GLOBALS, to np. nie ma gdzie podczepić komentarzy phpdoc. A nawet jak już gdzieś się je umieści, to wyjasnienie, co będzie wstawiane w poszczególne pola, wymaga dłuższych elaboratów. A z metodą - proste.

6. Powiązania każdy-każdy. Nie masz pojęcia które pliki/klasy korzystają z których, bo jak coś siedzi w $GLOBALS to każdy kawałek kodu ma do tego dostęp. Łatwość dodawania modułów, o której piszesz, wynika właśnie z tego, że wszystko ma dostęp do wszystkiego. A design obiektowy wymusza zastanowienie się, komu dać dostęp (referencję) do danego obiektu. Jak zrobisz coś podobnego w podanym przykładzie, to wyjdzie z tego chaos.

Czyli ogólnie... nie, nie mam przeciwwskazań jeżeli system jest na tyle mały (w sensie ilości kodu i liczby developerów) że da się tym zarządzać przy użyciu kodu nieobiektowego.
Go to the top of the page
+Quote Post
Ace
post
Post #38





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

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


ok to milo, bo w sumie to tylko jedna osoba to pisze -> ja (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale latwo mi jest dojsc do danego obiektu, a tak czy inaczej obiekty sa przypisywane wedlug konkretnych regul, module inaczej, clasy glowne inaczej, wiec z tym problemu nie mam...
Go to the top of the page
+Quote Post
jaco
post
Post #39





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

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


Wroce do tematu mojego silnika i jego "obiektowosci" otoz dzis przepisalem prawie caly na OO i bardzo mile sie zaskoczylem (wsumie to moje poczatki z OO i stara zasada nie zrozumiesz jak nie sporobojesz) - poczatkowo cyferki na liczniku generowania pomnozone byly 3-4 razy...

Okazalo sie, ze istota OO pozwala na wyeliminowanie blokow niezbednego kodu strukturalnego i w tym momencie licznik generowania odczuwa zmiane tylko na 3 miejscu po przecinku (wzrost o 0,003-0,006 - wymarzony efekt!!).

Z przykroscia stwierdzam jedynie, ze dziedziczenie jednej klasy przez druga spowalnia caly system okolo dwa razy w prownaniu z dwoma osobnymi obiektami.
Go to the top of the page
+Quote Post
Ace
post
Post #40





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

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


jeszcze wroce do wypowiedzi HAWK'a
Cytat
wynika właśnie z tego, że wszystko ma dostęp do wszystkiego. A design obiektowy wymusza zastanowienie się, komu dać dostęp (referencję) do danego obiektu


hm, przyszlo mi na mysl, ze w sumie chyba nie ma sensu branie pod uwage dostepnosci. Przeciez chyba wszystkie zmienne sa dostepne w zmiennej $GLOBALS...
wiec jesli ja tworze sobie w obietk np: silnik, to w GLOBALS bedzie dostep do tej funkcji, ja tak to robie. Wiec czemu ktos kto nie ma dostepu do jednej klasy nie zdobedzie go ? zaden problem napisac

[php:1:634880fed1]<?php
$nowy_obiekt = & $GLOBALS['nazwa_obiektu'];
?>[/php:1:634880fed1]

?
Go to the top of the page
+Quote Post
hawk
post
Post #41





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
jeszcze wroce do wypowiedzi HAWK'a

Nie zrozumieliśmy się. Wstawianie referencji do $GLOBALS ułatwia dostęp do odpowiedniego obiektu. Ułatwia aż za bardzo, tzn. coś się może do niego odwoływać z dowolnego miejsca w dowolnym pliku, i nie masz możliwości wymuszenia jakiegoś ograniczenia. W przypadku czystego OOP, musisz samemu zapodać jakiemuś obiektowi referencję do innego obiektu, aby mógł w ogóle z nim coś zrobić. Więc łatwiej jest kontrolować, gdzie dany obiekt jest używany.

A zalety podejścia obiektowego objawiają się, gdy obiektów jest dużo, kod trzeba modyfikować i nie pamięta się, gdzie dany obiekt był potrzebny. Aplikacje w php raczej nie osiągają setek klas i dziesiątek tysięcy linii kodu, więc można się tym nie przejmować i też działa.
Go to the top of the page
+Quote Post
Seth
post
Post #42





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Cytat
jeszcze wroce do wypowiedzi HAWK'a
Cytat

wynika właśnie z tego, że wszystko ma dostęp do wszystkiego. A design obiektowy wymusza zastanowienie się, komu dać dostęp (referencję) do danego obiektu


hm, przyszlo mi na mysl, ze w sumie chyba nie ma sensu branie pod uwage dostepnosci. Przeciez chyba wszystkie zmienne sa dostepne w zmiennej $GLOBALS...
wiec jesli ja tworze sobie w obietk np: silnik, to w GLOBALS bedzie dostep do tej funkcji, ja tak to robie. Wiec czemu ktos kto nie ma dostepu do jednej klasy nie zdobedzie go ? zaden problem napisac

[php:1:5a2c012149]<?php
$nowy_obiekt = & $GLOBALS['nazwa_obiektu'];
?>[/php:1:5a2c012149]

?

W ten spsob nie stworzysz powiazan klas.
Po drugie to nie jest to zgodne z OOP - aby dawac dostep do wszystkich obiektow systemu wszystkim obiektom.
Nie kazdy obiekt powinen ingerowac - miec dostp - np do klasy ustawien, czy parsera konfiguracji.
Dotgo dochodzi bezpieczenstwo oraz wieksze prawdopodobienstwo, ze bedzie gdzies blad... i tak jak wczesniej wspomnial hawk: "Mało modyfikowalne. Jak już masz to zaimplementowane to zmiana rozwala cały kod. A np. treść metody możesz wymienić, byleby tylko dalej zwracała co trzeba."

Takie sa poprostu zasady, ktorych trzeba sie trzymac, aby wykorzystac OOP i nie polpelniac bleddow, ktore pozniej moga byc trudne do wykrycia.
Go to the top of the page
+Quote Post
Ace
post
Post #43





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

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


ok, zrozumialem, lecz nadal jest kwestia dostepu, ze zawsze dobiore sie do obiektu poprzez $GLOBALS... czy nie jest tak ?
Go to the top of the page
+Quote Post
Seth
post
Post #44





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Tak, ale wlasnie to jest zlym nawykiem i nie trzymaniem sie OOP.
Go to the top of the page
+Quote Post
Balin
post
Post #45





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

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


Czy dobrym pomyslem jest wg. was stworzenie klasy jadra, ktora tworzy instancje wszystkich obiektow (singletonow), bibliotek i sprawdza ew. skad zostalo przyslane rzadanie o instancje danego obiektu ? U mnie taka klasa wyglada mniej wiecej tak:

[php:1:8cbc7c0737]<?php
class Kernel
{
static private $arrInstances = array();

static function GetInstance( $strInstanceName = 'Kernel' )
{
if( empty( self::$arrInstances[$strInstanceName] ) )
{
self::$arrInstances[$strInstanceName] = new $strInstanceName;
}

return self::$arrInstances[$strInstanceName];
}

static function CreateDBInstance( $objDBConfig )
{
require_once( 'db_drivers/' . $objDBConfig->GetUsedDB() . '.class.php' );

if( empty( self::$arrInstances['DB'] ) )
{
self::$arrInstances['DB'] = new DB( $objDBConfig->GetHostName(), $objDBConfig->GetUserName(), $objDBConfig->GetPassword(), $objDBConfig->GetDBName() );
}

return self::$arrInstances['DB'];
}
}
?>[/php:1:8cbc7c0737]

i przykladowe uzycie w aplikacji:

[php:1:8cbc7c0737]<?php
class App
{
private $objDB = null;
private $objIO = null;
private $objConfig = null;
private $objSession = null;
private $objTemplate = null;
private $objTimer = null;

private $objPage = null;

function __construct()
{
$this->objTimer = Kernel::GetInstance( 'Timer' );
$this->objTimer->CreateTimer( 'main_timer' );

$this->objDB = Kernel::CreateDBInstance( Kernel::GetInstance( 'DBConfig' ) );
$this->objIO = Kernel::GetInstance( 'IO' );
$this->objConfig = Kernel::GetInstance( 'Config' );
$this->objSession = Kernel::GetInstance( 'Session' );
$this->objTemplate = Kernel::GetInstance( 'Template' );

$this->objPage = Kernel::GetInstance( 'Page' );
}
}
?>[/php:1:8cbc7c0737]

moze lepiej byloby to rozwiazac inaczej ? Czy w ogole warto tworzyc osobna klase reprezentujaca jadro systemu, czy moze umieszczac wszystko bezposrednio w kodzie aplikacji ?
Go to the top of the page
+Quote Post
Ozzy
post
Post #46





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

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


U mnie jak na razie (a pewnie zmieni się 100 razy) wygląda to tak:

Użycie:
[php:1:650229d311]<?php

@require 'Main.php';

Main::set('Controller', new Controller);


?>[/php:1:650229d311]

Klasa Main:

[php:1:650229d311]<?php


final class Main {


private static $references = array();


public static function set($className, $reference) {

self::$references[$className] = $reference;

}


public static function get($className) {

if(array_key_exists($className, self::$references)) {
return self::$references[$className];
}

}


public static function load($name, $notClass = false, $notReport = false) {

[ciach]

}

}


function __autoload($className) {

Main::load($className);

}


?>[/php:1:650229d311]

Klasa Controller:


[php:1:650229d311]<?php

final class Controller {


public function __construct() {

Main::load('functions/main', true);
Main::load('functions/page', true);
Main::set('Page', new Template('Main'));
Main::set('ErrorHandler', new ErrorHandler);
Main::set('Client', new Client);

$cfg = new Cfg('db');

Main::set('SQL',
new mysqli(
$cfg->get('host'),
$cfg->get('user'),
$cfg->getDecoded('pass'),
$cfg->get('db')
)
);

Main::set('SessionHandler', new SessionHandler);
Main::set('Rewrite', new Rewrite('sdd'));
Main::get('Rewrite')->set(0, 'home');
Main::get('Rewrite')->set(1, 0);
Main::get('Rewrite')->set(2, 0);

}


}

?>[/php:1:650229d311]

Główna różnica w porównianiu z Twoją (Balin) klasą polega na tym, że obiekty można konstruować z parametrami (czasem się przydaje).

Nie tak dawno używałem czegoś podobnego do Twojego, jednak uznałem, że obecne rozwiązanie ma więcej zalet.
Można na przykład przechowywać dowolną ilość instancji tej samej klasy pod innymi nazwami.
Napisz co o tym myślisz.
Go to the top of the page
+Quote Post
Balin
post
Post #47





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

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


Rozwiazanie ciekawe, ale wg mnie troche niebezpieczne - kozystajac z metody, ktora zastosowales tracisz kontrole nad tym ile egzemplarzy obiektow zostalo utworzonych, ja wykorzystuje jadro tylko do tworzenia singletonow, wiec nie potrzebuje mozlwosci tworzenia kilku egzemplarzy jednej klasy, planuje zaimplamentowac u siebie mechanizm, ktory bedzie sprawdzal skad nastapilo rzadanie przekazania referencji do obiektu i na tej podstawie ocenial czy dany modul ma uprawnienia aby otrzymac taka referencje.
Chce sie jednak wczesniej dowiedziec czy takie rozwiazanie ma sens w duzym, elastycznym projekcie nastawionym na rozwoj ?
Go to the top of the page
+Quote Post
Ozzy
post
Post #48





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

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


Cytat
wg mnie troche niebezpieczne


Tak jak mówie, zmieni się jeszcze 100 razy, bo na razie tak jak Ty szukam jakiegoś rozsądnego rozwiązania.

Update: Korzystając z okazji, ile wykonuje Ci się ten kod? (z wszystkimi klasami) i do czego służy klasa IO?
Go to the top of the page
+Quote Post
hawk
post
Post #49





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Czy dobrym pomyslem jest wg. was stworzenie klasy jadra, ktora tworzy instancje wszystkich obiektow (singletonow), bibliotek i sprawdza ew. skad zostalo przyslane rzadanie o instancje danego obiektu ?

Po pierwsze, instancji singletona nie da się stworzyć z zewnątrz. Singleton sam tworzy sobie instancję kiedy jest mu potrzebna. Na tym właśnie polega singleton i twój kod - mówiąc wprost - nie ma z nim nic wspólnego.

Po drugie, jak chcesz sprawdzić, "skąd przyszło żądanie"?(btw: żądanie, nie rządanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) Takie coś potrafi natywnie zrobić tylko error handler, ew. debug_backtrace(), ale nie sądzę, aby o to chodziło.

Po trzecie, samo w sobie takie sprawdzanie jest złe. Bo wprowadzasz dodatkową warstwę - jakieś ograniczenia i zasady, których nie widać na diagramie klas i w ogóle nie wiadomo do czego przynależą. Wzrost chaosu. A to (brak kontroli) wcale nie jest wielkim zagrożeniem. Bo w dobrym systemie i tak nie można nic zepsuć - masz metodę getX(), ale nie masz setX() i nie zepsujesz obiektu. A poza tym takie zepsucie jest działaniem świadomym. Jeżeli założymy, że programista nie chce sam rozwalić sobie kodu, to nie jest to potrzebne. Wiesz, że dany moduł nie potrzebuje bazy danych - nie używasz, bo po co?

Po czwarte, po co ci obiekt którego jedynym zadaniem jest tworzenie innych obiektów? Jeżeli nie wnosi nic dodatkowego, to singletony załatwiają sprawę i są prostsze. Chyba że wnosi on dodatkową "inteligencję".

Po piąte, bardzo się cieszę że widzę wreszcie kod w PHP5, a nie tylko ciągle stary paskudny PHP4 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) .
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #50





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Ja sie ostatnio sklaniam ku pelnej modularyzacji z trzema centralnymi interfejsami.
1) Input
2) Output
3) Processing

I tak, modul jadra po uruchomieniu na podstawie danych srodowiskowych (ustawienia systemu+argumenty) decyduje o zwracanym pakiecie danych (szablony danych w xml) i zwracanym formacie danych (html,xhtml,wap, sidebar, rss). Nastepnie sprawdza czy posiada "swierzy" cache z takim outputem, jesli tak, uzywa go, jesli nie wybiera format danych wejsciowych (input - baza danych, rdf, xml, remote xml), uruchamia klase dziedziacza interfejs Processing odpowiedzialna za dany szablon, ktora zwraca xml, ktory po sprawdzeniu na zgodnosc z DTD parsowany jest klasa dzidziczaca po interfejsie Output (np XHTMLOutput albo WAPOutput) korzystajaca z transformantow xsl. Wynik jest cachowany i wypluwany.

Generalnie przy budowie mocno wzorowalem sie na Gecko przy takich sprawach jak podzial na Serwisy i Interfejsy (serwis to klasa nie posiadajaca instancji - jak np. output), i staralem sie wprowadzic maksymalna ilosc kontroli przy uzyciu specjalizowanych XMLi w transporcie danych miedzy modulami. Mam swiadomosc narzutow czasowych, ale rekompensowane jest to przez cache.

Mam nadzieje, ze choc troche zrozumiale to brzmi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) To moja pierwsza proba z xml->xslt jako generatorem wyjscia, ale dziala to to ladnie i nawet szybko (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
hawk
post
Post #51





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


@e-Gandalf:
To naprawdę ciekawe podejście. Zastanawiam sie, jak rozwiązałeś kwestię cache (co to znaczy świeże, jak rozwiązać problem dynamicznych danych, itd.). Bo XSLT ma wielkie możliwości, ale jednak nie nadaje się do stosowania przy każdym żądaniu.

BTW, przychodzi mi na myśl zaraz Cocoon... może znasz? Dla php był chyba jakiś klon, o dźwięcznej nazwie Popoon (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) .
Go to the top of the page
+Quote Post
lolek09
post
Post #52





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 30.05.2003
Skąd: Kraków

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


Hmm... może trafię jak kulą w płot, ale jak mniej więcej działa klasa IO (czyli chyba Input/Output). Rozumiem, że przechowuje dane input a więc _POST _GET _COOKIES itp. Ale nie rozumiem po co. Przecież to są tablice superglobalne. Wszędzie można je czytać. Po prostu to jest to co mi pierwsze przyszło na myśl - ale skoro taką klasę stosukecie, znaczy jest potrzebna. Czy moglibyście mnie oświecić?
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #53





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Cytat
Zastanawiam sie, jak rozwiązałeś kwestię cache (co to znaczy świeże, jak rozwiązać problem dynamicznych danych, itd.).


Tak jak onet (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Output idzie do pliku o losowej nazwie, a do bazy wpis z indeksem pliku, informacja o szablonie, formacie i zestawie danych dla jakich plik cache zostal stworzony i data. Jesli jakas klasa modyfikuje dane (np. dodawny jest news) odpowienie szablony sa dodawne do kolejki generacji cache.

Cytat
BTW, przychodzi mi na myśl zaraz Cocoon... może znasz? Dla php był chyba jakiś klon, o dźwięcznej nazwie Popoon .


Nie wiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ja bardzo nie lubie gotowcow php bo jestem nimi nieodmiennie zawiedziony. Biblioteka Pear moim zdaniem zasluguje na miano najgorszej oficjalnej biblioteki jezykowej na swiecie.


Lolek9: To co napisales (GET|POST) to argumenty okreslajace zapytanie. Czyli przekladajac na model ludzki one okreslaja (wraz z np. parametrami konfiguracyjnymi serwisu) co ma serwis wypluc i jak ma to wygladac. Input to zestaw danych z jakich korzystamy (pliki xml, baza danych itp) a output to to co jest wypluwane, u mnie jest to xml/xslt
Go to the top of the page
+Quote Post
lolek09
post
Post #54





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 30.05.2003
Skąd: Kraków

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


Dzięki, ach... czuje na swej skurze łagodny blasko oświecenia (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Czyli po prostu źle zrozumiałem rolę klasy Input i Output.
Dzięki
A, i jeszcze jedno pytanko... czy klasa Input np. powinna na przykład czytać z różnych plików?
Sprecyzuje może moje pytanko. Mam klasę User i mam nadzieję mieć klasę Input (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
No i teraz plik w którym trzymam dane userów mam jako atrybut w input, a chce, aby z poziomu klasy User możnabyło dostać się do zawartości pliku. Czy to klasa User powinna czytać plik, czy może powinna po prostu wywołać metodę obiektu Input która przeczyta i zwróci zawartość??
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #55





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


No, to juz jest bardzo dyskusyjne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Sadze, ze kazdy uczestnik tej grupy bedzie mial wlasne zdanie. Ja sklaniam sie ku rozwiazaniu abstrakcyjnego API. tworzysz klase abstrakcyjna, lub (w php5) interfejs z metodami publicznymi getRow(num), getNextRow(), setPointer(num), getRows() i tak dalej a potem tworzysz wyspecjalizowane klasy dziedziczace ten interfejs, ktore te metody stosuja dla pliku xml o konkretnej budowie, albo dla bazy danych, albo dla pliku tekstowego, albo dla pliku RDF... Klasa User powinna pobierac z silnika referencje do aktywnej instancji klasy korzystajacej z interfejsu Input i uzywajac jej pobierac. Staraj sie mocno rozgraniczac to co zajmuje sie przetwarzaniem danych wewnatrz, a to co pobiera te dane z zewnatrz. Dzieki temu chcac zmienic metode przechowywania danych masz pewnosc, ze musisz jedynie podmienic klase implementujaca Input na inna.
Go to the top of the page
+Quote Post
marcin96
post
Post #56





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.08.2003
Skąd: Będzin

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


e-Gandalf.. a Ty czasem nie mówisz o DAO? Input to są jak dla mnie właśnie te dane przechwytywane od usera - czyli np: dane COOKIE, czy zmienne przesyłane np: POST'em... A to, o czym mówisz, to korzystanie z abstrakcji na źródło danych... (a nie dane wprowadzane z zewnątrz) czyli DAO. Czy może mylę pojęcia gdzieś? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) )
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #57





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Hmm... no sluchajcie, wszystko zalezy od sposobu patrzenia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dla mnie aplikacja wyglada tak:

Input <-- Processing+Engine--> Output

Gdzie Processing+Engine ma za zadanie pobrac dane wejsciowe i wypluc wyjsciowe. Gdzies tam przy okazji moze zrobic cos jeszcze (jak np. cache, z ktorego nastepnym razem skorzysta), a sposob dzialania ma uzalezniony od argumentow na rzecz ktorych jest wywolywany, ale Wejsciem dla mnie sa dane (nota bene) wejsciowe, a nie argumenty.
Ale nie bede sie upieral przy nazewnictwie, moze byc Ble i Bla, byleby dzialalo dobrze i pozwalalo na wygodna konserwacje oraz latwe dobieranie zrodel wejsciowych i wyjsciowych dla danych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
hawk
post
Post #58





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


@e-Gandalf:
Hmm, a jak to się ma do iteratorów w PHP5? Bo różni ludzie wymyślali różne DAO, własne iteratory i abstrakcję. A potem przyszło PHP5 i to wszystko jest lekko nieaktualne, bo PHP5 ma własne iteratory, i to lepsze.

Czy metody getRow(), getNextRow(), itd, nie robią czegoś w rodzaju iteratora? No może więcej niż iterator bo z dostępem swobodnym, ale IMHO robienie samemu czegokolwiek co służy do iteracji przestaje mieć sens. Zresztą zauważ że taki ogólny interfejs nie powinien mieć getRow(num), bo np. zapytanie SQL nie ma dostępu swobodnego - robisz query i dostajesz kolejne wiersze. Taki Input musiałby cacheować całość wyniku, a to nie jest optymalne. Więc lepiej pozostać przy dostępie sekwencyjnym.

A może POST i zapytanie do bazy są na tyle różne, że nie da się ich wcisnąć w ten sam interfejs? Może lepiej zrobić Input (tylko sekwencyjny) i CachedInput (extends Input + swobodny)? Hmm, jeszcze trochę i sam się zakręcę...
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #59





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Cytat
@e-Gandalf:
Hmm, a jak to się ma do iteratorów w PHP5? Bo różni ludzie wymyślali różne DAO, własne iteratory i abstrakcję. A potem przyszło PHP5 i to wszystko jest lekko nieaktualne, bo PHP5 ma własne iteratory, i to lepsze.


Ale iterator daje Ci tylko wygodna metoda przechowywania listy danych, a ja mowie o komunikacji ze strefa zewnetrzna. Nie zbierzesz do iteratora wierszy z bazy danych, bo tych wierszy moze byc tam 10 milionow. Lepiej sprecyzowac ile pobierac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Czy metody getRow(), getNextRow(), itd, nie robią czegoś w rodzaju iteratora? No może więcej niż iterator bo z dostępem swobodnym, ale IMHO robienie samemu czegokolwiek co służy do iteracji przestaje mieć sens.


Pewnie. Dlatego Iterator czy Enumerator oficjalny z php5 mozna uzywac do zwracania wynikow tych funkcji.

Cytat
Zresztą zauważ że taki ogólny interfejs nie powinien mieć getRow(num), bo np. zapytanie SQL nie ma dostępu swobodnego - robisz query i dostajesz kolejne wiersze.


Podalem tylko przyklad, ale przedstawie Ci przyklad wdrozenia:

$x = $engine->services->getDefaultInput()::createStream();
$x->setInitPoint('localhost'.'baza','user','haslo','tablica');
/* i czesc uniwersalna */
$x->getRow(4);


i jesli getDefaultInput() jest wskaznikiem na MysqlInput to polaczy sie z baza danych i ustawi sobie query na tablice "tablica". Nastepnie getRow(4) wywoluje zapytanie 'select * from tablica limit 4,1'

To oczywiscie tylko przyklad, pewnie nalezaloby to wykonac troche inaczej, ale da sie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A na dodatek, potem, transparentnie dla API mozesz cachowac to query i np. trzymac w bazy wyniki, aby drugie zapytanie o getRow(4) zwracalo zawsze z cache, chyba, ze $x wykonywal metody set/update (czyli istnieje ryzko, ze dane byly modyfikowane).

Cytat
Taki Input musiałby cacheować całość wyniku, a to nie jest optymalne. Więc lepiej pozostać przy dostępie sekwencyjnym.


Nie koniecznie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Moglby, ale nie musialby. Wszystko zalezy jak zbudujesz klase, i do czego bedzie uzywana.

Cytat
A może POST i zapytanie do bazy są na tyle różne, że nie da się ich wcisnąć w ten sam interfejs?


No, interfejsu do Posta jeszcze nie robilem, ale wydaje mi sie, ze da sie. A jak ktos sie uprze to moze zrobic interfejsy dziedziczne ObjectInput i ListInput gdzie dziedziczyc po ListInput beda klasy odpowiedzialne za baze danych, rdf, tablice, skrzynke pocztowa i inne formy wielokrotnie powtarzajacych sie danych, a ObjectInput bedzie przyjmowal obiekt HttpResponseInput z wlasciwosciami argumentow _POST|_GET, XmlInput, TextFileInput itp.

Cytat
Może lepiej zrobić Input (tylko sekwencyjny) i CachedInput (extends Input + swobodny)? Hmm, jeszcze trochę i sam się zakręcę...


Mozliwosci sa ogromne, a w tej kwestii w php standardu jeszcze nie ma zadnego.
Go to the top of the page
+Quote Post
hawk
post
Post #60





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Uff, sporo tego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat
Stąd min. korzystam z hashMapu (napisanego przeze mnie) oraz wielu elementów javovych.

Tutaj jestem bardzo przeciwny. Wiem że jest taka tendencja (eclipse, phrame), ale to bez sensu. php już ma HashMapy - tablice asocjacyjne. I klasa HashMapy nic nowego ci nie zaoferuje. Podobnie wiedziałem w php klasy ArrayList (to już szczyt głupoty), Iterator (w PHP5 równie wielka głupota) itd. To tylko balast, bezużyteczny kod i dodatkowe ułamki sekund przy każdym żądaniu.
Cytat
Otoz chodzi mi o to czy przykladowo sesje operujace na bazie danych mozna zaliczyc do modelu ? Przykladowo rozpoczynajac sesje wywolywal bym session::create(); referencje do tablicy SESSION poprzez session::get itd.

No cóż, sesje, dane post, itd. generalnie nie pasują do MVC. Z jednej strony to jest źródło danych -> Model. Z drugiej strony tylko Kontroler powinien wiedzieć że jest żądanie HTTP -> Kontroler. IMHO nie ma sensu wpychać tego nigdzie na siłę. Sesje to jest coś jak Model, ale odrębne, bo Model się pisze pod konkretną aplikację, a obsługa sesji jest częścią jądra systemu/frameworku.

A swoją drogą, ja skłaniam się do włożenia sesji do kontekstu. To chyba pomysł z ASP.NET - klasa Context, która łączy Request i Response, czyli zbiera do kupy wszystko, co związane jest z komunikacją klient - serwer.

Cytat
I kolejna sprawa jest dostep do konkretnej akcji. Wywolanie jej wyglada u mnie mniejwiecej tak:

router (parsowanie urla) -> httpServletRequest -> ActionController(mappings) -> nastepnie calosc roznych dziwnych operacji (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) z ladowaniem bibliotek i sprawdzaniem zaleznosci... I teraz gdzie ja tu mam wtrynic kontrole dostepu... Skoro korzysta ona z db to chyba trzeba to zaliczyc do modelu ? Czy ma byc to czesc actionControllera. Poradzcie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Miło widzieć że ktoś też lubi router (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Widzicie to, zespół core? Coś w tym jest.
Ja bym jednak umieścił router ZA kontrolerem. Tak będzie działał (działa) phiend2, i ma to wielką zaletę: router można sobie łatwo wymienić, bo to zawarte jest w konfiguracji kontrolera. I kiedy nagle przyjdzie ci do głowy że index.php?action=foobar jest głupie, i chcesz mieć index.php/foobar, to tylko wybierasz odpowiedni router.

A co do kontroli dostępu, czyli auth... Owszem, auth można włożyć do Modelu. Tylko wtedy najpierw jest tworzona akcja, a potem akcja wywołuje metody auth. Bo przecież z Modelu korzystają akcje. A to nie jest dobre, bo można po prostu zapomnieć w jednej akcji sprawdzić prawa dostępu i już mamy security breach. Takie rzeczy jak auth powinny odbywać się PRZED akcją, żeby była pewność że zawsze się wykonają. Niewykonany auth to gorzej niż niewykonana akcja.

Wracając do pytania - gdzie to wcisnąć? Odpowiedź jest prosta i znowu żywcem wzięta z phiend2 - Intercepting Filter. Piękny wzorzec, wrzucasz do kontrolera obsługę filtrów (wczytywanie z pliku konfiguracyjnego i odpalanie). O samym wzorcu poszukaj na MSDN (narawdę mają bardzo dobry dział dot. wzorców dla aplikacji internetowych) i Sunie - zresztą w J2EE Intercepting Filter jest wbudowany.
Go to the top of the page
+Quote Post
hawk
post
Post #61





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Hmm no i nasunelo mi sie kolejne pytanie :] Jak nazwac aplikacje ktora jest zarowno frameworkiem, enginem, zbiorem bibliotek ? API ? Juz sam nie wiem jak to moje cos nazwac (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

phiend :mrgreen:
Na resztę odpowiem jutro, time to get some sleep
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #62





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Doleje troche oliwy do ognia, a co (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Tutaj jestem bardzo przeciwny. Wiem że jest taka tendencja (eclipse, phrame), ale to bez sensu. php już ma HashMapy - tablice asocjacyjne. I klasa HashMapy nic nowego ci nie zaoferuje.


Ding - dong. To ja Cie bardzo poprosze o wygodna implementacje containsValue w tym "PHPowym hasmapie" - oczywiscie bedziesz mi iterowal algorytmem o zlozonosci liniowej element po elemencie. HasMap znany nam np. z Javy posiada liste poindeksowanych wartosci tak samo jak posiada liste poindeksowanych kluczy. "Dobranie sie" do odpowiedniej wartosci i do odpowiedniego klucza daje ten sam narzut czasowy.
Po drugie kazdy szanujacy sie HasMap posiada wlasciwosc LoadFactor majaca niebagadelny wplyw na wygode dzialania tablic. LoadFactor dopasowany dobrze do przechowywanych wartosci potrafi czasem dwukrotnie nawet przyspieszyc dzialanie.
Indeksowane tablice w php to bardzo mala namiastka i zastepowanie ich powaznym hasmapem uwazam za jak najbardziej na miejscu!

Cytat
Podobnie wiedziałem w php klasy ArrayList (to już szczyt głupoty), Iterator (w PHP5 równie wielka głupota) itd. To tylko balast, bezużyteczny kod i dodatkowe ułamki sekund przy każdym żądaniu.


Znowu niekoniecznie.
Iterator z Javy daje mi mozliwosc latwego kasowania elementow, bez niebezpieczenstwa utraty plynnosci iteracji. W php jesli sie nie myle nie jest to takie "fajne".

Cytat
A swoją drogą, ja skłaniam się do włożenia sesji do kontekstu. To chyba pomysł z ASP.NET - klasa Context, która łączy Request i Response, czyli zbiera do kupy wszystko, co związane jest z komunikacją klient - serwer.


Apage (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) To pomysl Tomcata zdaje sie, albo Resina - juz nie jestem pewien (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Wracając do pytania - gdzie to wcisnąć? Odpowiedź jest prosta i znowu żywcem wzięta z phiend2 - Intercepting Filter. Piękny wzorzec, wrzucasz do kontrolera obsługę filtrów (wczytywanie z pliku konfiguracyjnego i odpalanie). O samym wzorcu poszukaj na MSDN (narawdę mają bardzo dobry dział dot. wzorców dla aplikacji internetowych) i Sunie - zresztą w J2EE Intercepting Filter jest wbudowany.


Zgadzam sie, ale wykorzystanie IF nie zawsze wydaje mi sie konieczne, natomiast wszelkie metody autoryzacji wykonywalbym tuz po czesci inicjujacej dzialanie silnika. W momencie kiedy srodowisko "klienckie" dziala, a "administracyjne" nie jest jeszcze zainicjowane.
Go to the top of the page
+Quote Post
hawk
post
Post #63





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Hmmm ciekawe to co piszesz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A wracajac do routera. Jakie wg ciebie zadanie powinien on spelniac ? U mnie generalnie router sluzy do a) walidacji url'a (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) jego sparsowaniu

U mnie router to obiekt, który dostaje Context i ma wymyśleć nazwę akcji. Interfejs chyba dużo nie mówi:
[php:1:148251ea58]<?php

interface IRouter {
public function translate(HttpContext $context);
}

?>[/php:1:148251ea58]
Fajnie byłoby jeszcze, jakby router mógł robić "w drugą stronę", tzn zamieniać nazwę akcji na URLa. Wtedy mamy automatyczne generowanie URLi, i co najważniejsze, jak zmienimy router (czyli schemat budowy URLi dla całej aplikacji), dotychczasowy kod się nie zmienia, bo nowy router generuje URLe wg nowego schematu.
Poza tym router może sprawdzać, czy przeglądarka obsługuje XHTML (i jakoś to przekazywać do akcji), itd.
Cytat
Kolejne "cos" co mnie meczy jest raportowanie bledow w obrebie akcji. Przykladowo user wypelni zle pole haslo, chcemy wyswietlic komunikat. I teraz czy komunikat ten jest akcja ( FALLBACK ACTION ) czy wywolana z modelu metoda powiedzmy errors::message itp ?

Komunikat to nie akcja, i zapewne jest wyciągany z modelu. Ale obsługa formularzy to inna sprawa, jest tu gdzieś ładny wątek o tym...

Cytat
Czy moglbys rozwinac hawk swoja mysl z CONTEXT'em ?

Context = request (POST, URL, itd) + dane o akcji (jeżeli mamy MVC) + response (do co wypluwają akcje).

Cytat
Moze jeszcze co sadzisz o tym fragmencie kodu, napisany przez mnie przed chwila:

A do czego służy httpServletRequest? Pachnie Javą, ale z J2EE mam mało wspólnego (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) .
Go to the top of the page
+Quote Post
hawk
post
Post #64





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Ding - dong. To ja Cie bardzo poprosze o wygodna implementacje containsValue w tym "PHPowym hasmapie"

Tu mnie zagiąłeś :oops: . Zdarzyło mi się widzieć w php tylko badziewiaste HashMapy które udają że nie są debilną tablicą asocjacyjną. A containsValue() tłumaczy się w php na in_array(), i nie mam pojęcia jak jest w środku implemntowane. Może tablica asocjacyjna potrafi więcej niż tylko liniowe przeszukiwanie? Ktoś wie?

Cytat
Iterator z Javy daje mi mozliwosc latwego kasowania elementow, bez niebezpieczenstwa utraty plynnosci iteracji. W php jesli sie nie myle nie jest to takie "fajne".

Tutaj to nie jest takie proste. Bo ta łatwość jest po stronie klienta, a implementując iterator już tak łatwo nie jest. Ale masz rację: Iterator np. na ArrayList obsługuje usuwanie bardzo przyjemnie, a z foreach(...) już byłoby topornie.

Cytat
Zgadzam sie, ale wykorzystanie IF nie zawsze wydaje mi sie konieczne, natomiast wszelkie metody autoryzacji wykonywalbym tuz po czesci inicjujacej dzialanie silnika. W momencie kiedy srodowisko "klienckie" dziala, a "administracyjne" nie jest jeszcze zainicjowane.

Hmm, tzn kiedy? Nie tak łatwo się porozumieć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Jak dla mnie, uwierzytelnianie może być jak najwcześniej, natomiast autoryzacja dopiero wtedy, gdy wiemy, jaką akcję chcemy wykonać (skrzywienie MVC). A to niestety nie jest tak wcześnie - przedtem wstają różne filtry, db, sesje, router, trzeba w ogóle ściągnąć config akcji... A IF podoba mi się dlatego, że nie chcę wrzucać rzeczy takich jak auth na sztywno do silnika, jak w "starym" phiendzie. IF pozwala wywalić dużo rzeczy na zewnątrz, zwiększając tym samym elastyczność i konfigurowalność, a mimo to mogę je wykonać w podobnym momencie, jako część silnika, a nie część akcji.
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #65





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Cytat
OT: php5 pociaga mnie bardziej chyba niz moja dziewczyna (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) ale boje sie go uzywac bo nie mam pojecia kiedy wejdzie do powszechnego uzycia. I co z tym fantem zrobic ?


Skontaktuj sie z lekarzem... To naprawde niebezpieczne - mi musial pomagac po pierwszym spotkaniu z Tomcatem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Hmm, tzn kiedy? Nie tak łatwo się porozumieć . Jak dla mnie, uwierzytelnianie może być jak najwcześniej, natomiast autoryzacja dopiero wtedy, gdy wiemy, jaką akcję chcemy wykonać (skrzywienie MVC). A to niestety nie jest tak wcześnie - przedtem wstają różne filtry, db, sesje, router, trzeba w ogóle ściągnąć config akcji... A IF podoba mi się dlatego, że nie chcę wrzucać rzeczy takich jak auth na sztywno do silnika, jak w "starym" phiendzie. IF pozwala wywalić dużo rzeczy na zewnątrz, zwiększając tym samym elastyczność i konfigurowalność, a mimo to mogę je wykonać w podobnym momencie, jako część silnika, a nie część akcji.


Mhm, masz racje, pomysl jest bardzo "czysty" i logicznie spojny - jak zreszta wiekszosc z Javy. Naprawde, uwazam, ze implementacja server-side w wykonaniu Javy jest praktycznie wzorcowa i jedyne co mozemy robic to ja emulowac w php (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A co do auth - wiesz, to tak jak z wysylaniem zapytan do bazy. Bardzo trudno to robic w jednym miejscu. Auth musi moc byc odpalony w czasie trwania calej akcji, poniewaz autoryzacja czegos co ty nazywasz akcja (zakladajac, ze dobrze zrozumialem ja to nazywam generacja szablonu) to poczatek. Potem w trakcie wykonywania akcji nalezaloby jeszcze sprawdzic czy uzytkownik ktory ma prawo do obejrzenia tego dokumentu powinien tez zobaczyc przecisk 'edit' umieszczony pod nim, nie?
Go to the top of the page
+Quote Post
hawk
post
Post #66





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
A tak btw. hawk skad sciagnac phiend2 (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ?

Znikąd. phiend2 powstaje w bólach i nie zanosi się na szybki przełom.
Cytat
A co do auth - wiesz, to tak jak z wysylaniem zapytan do bazy. Bardzo trudno to robic w jednym miejscu. Auth musi moc byc odpalony w czasie trwania calej akcji, poniewaz autoryzacja czegos co ty nazywasz akcja (zakladajac, ze dobrze zrozumialem ja to nazywam generacja szablonu) to poczatek. Potem w trakcie wykonywania akcji nalezaloby jeszcze sprawdzic czy uzytkownik ktory ma prawo do obejrzenia tego dokumentu powinien tez zobaczyc przecisk 'edit' umieszczony pod nim, nie?

Prawda. IMHO ważne jest żeby pierwsze odpalenie auth było przed akcją - może w ogóle nie trzeba ładować akcji. I to jest ta część od której zależy bezpieczeństwo systemu - np. czy user może usuwać artykuły. Potem, w trakcie wykonywania akcji, nie ma rady, trzeba znowu sprawdzać. Ale jak tutaj się zapomni to będzie bezużyteczny przycisk, a nie włamanie do systemu.

BTW, z tym związany jest problem. Jeżeli będzie gdzieś zapisane że do akcji "DeleteArticle" mają dostęp grupy "Administrators" i "Moderators", to przy wyświetlaniu przyciski "Delete article" można albo sprawdzać przynależność do tych grup (wtedy trzeba pilnować żeby nie rozjechało się z wpisami przy akcji "DeleteArticle", albo sprawdzać config samej akcji, co kosztuje znacznie więcej.
Go to the top of the page
+Quote Post
Ace
post
Post #67





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

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


Mam pytanie z innej beczki, lecz tez dotyczy jadra .

Mianowicie ile ? Jak dlugo wykonuje sie skrypt strony waszej, ktory analizuje dane, przetwarza je i wypluwa do przegladarki. Wlasnie dobiegl koncu pisanie mojego systemu i nie wiem czy sie cieszyc czy nie, ale jeszcze tak dlugo stworzone przeze mnie skrypty sie nie wykonywaly. Do rzeczy:

Kod
strona wygenerowana w : 0.0348260 sekund


czy to duzo ? Moze podacie jakies swoje wyniki dla porownania. Moj system narazie zawiera automatycznie ladowane moduly, prosta administracje strony - tzn, administracja uzytkownikow, oraz edycjia pozycji w menu. W kazdym badz razie ten wynik wydaje sie jak dla mnie duzy. Ciekawi mnie w jakim czasie generuje sie np: to forum, lub vortal php.pl ...

pozdrawiam
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #68





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


zalezy tez od procesora oczywiscie...

hawk: ja bym sprawdzal tablice uprawnien aktualnego uzytkownika. taka tablice tworzylbym na poczatku i potem nie obchdozi mnie czy on moze to zrobic bo nalezy do tej grupy czy dlkatego ze ma solowe uprawnienia
Go to the top of the page
+Quote Post
hawk
post
Post #69





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Hmm, ale to nie jest takie proste. Bo ja widzę system uprawnień trochę jak system plików. Są sobie obiekty (u mnie: akcje), do których można nadawać prawa. System nie definiuje z góry ile takich obiektów może być, i w ogóle jakie są. Czyli nie definiujemy na sztywno praw "usuwanie artykułów" itd (całe mnóstwo), tylko jest obiekt "usuwanie artykułów" do którego można nadawać prawa.

No i teraz znalezienie wszystkich obiektów do których użytkownik ma dostęp nie jest proste. Raz że użytkownik należy do wielu grup. A dwa że ja bym chciał te obiekty mieć zagnieżdżane. Tzn jest sobie taki pseudo-katalog "artykuły", w nim "usuń artykuł", "dodaj artykuł" itd. I jak nadam prawa do "artykuły" to za jednym zamachem przenosi się to niżej. Czyli analogia z systemem plików, zwłaszcza tym z WinNT, jest bardzo trafna.

Ale "ja mam" oznacza tutaj "ja bym chciał żeby było w jądrze THOTa i czekam aż ktoś to napisze" (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #70





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Ok, ok. ale to nie koliduje z elastycznoscia. Ja tylko mowie, ze na poczatku tablica uprawnien (zagniezdzona, czy nie, wielowymiarowa czy nie) zostaje wypelniona dla tego usera i do konca wykonywania strony uyzwam tej tablicy.
Go to the top of the page
+Quote Post
hawk
post
Post #71





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


No cóż, fanatyczne trzymanie się MVC jest tak samo złe jak każdy inny rodzaj fanatyzmu...
W momencie, gdy chcemy, żeby framework robił coś inteligentnego, a nie tylko uruchamiał akcje (bo to można zrobić w kilku linijkach nawet), robi się pewien konflikt na styku Model - Kontroler. Ja bym powiedział tak: akcje SĄ częścią Kontrolera (nie kontrolera jako klasy, ale jako logiczna część aplikacji), więc skoro akcje mogą odwoływać się do Modelu, to kontroler (już jako obiekt) też może, więc sprawdzanie uprawnień przed wykonaniem akcji nie jest zbrodnią.

A poza tym - to nie jest problem tylko php. Ten Intercepting Filter, który chwalę, pochodzi z J2EE. A przecież to jest właśnie nasz problem - jest sobie "coś", co nie jest akcją, ale może grzebać w Modelu. Skoro oni mogą, to my też (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) .

A pomysł z Model3 bardzo mi się podoba. Gdyby to nagłośnić, rozreklamować, i koniecznie opatentować, to wtedy żyć nie umierać.
Go to the top of the page
+Quote Post
bela
post
Post #72


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


mam pytanko

mozecie podac jakies materialy o pisnaiu jadra?

przeczytalem to co jest na webcity ale jakos za bardzo nie kumam :?
Go to the top of the page
+Quote Post
michaloo
post
Post #73





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 15.05.2003
Skąd: Bielsko-Biała

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


pytanie numer 2:
Przeglądając tak te wszystkie strony nie znalazłem nic na temat przekazywania informacji o modulach i operacjach jakie one maja wykonac. Bo zacząłem tworzyć system, w którym główna klasa pobiera (własnie, skąd?) informacje jakie modoly maja byc uruchomione i wysyla zapytanie do bazy (gdzie znajduje sie rejestr modolow i wymaganych uprawnien) skad otrzymuje informacje o wymaganych uprawnieniach usera i sprawdza czy takie ma jezeli nie to wyswietla stosowna informacje. Poczatkowo myslalem ze trzeba bedzie przesylac tylko dane dotyczace modolu glownego (biorac pod uwage ze wyglad bedzie standardowy czyli php-nuke'owy to modol glowny to bedzie "ten-na-środku") jednak pozniej stwierdzilem ze musze rowniez przekazywac dane dla innych modolow (tych wyswietlanych "po-bokach") i tutaj klops nie wiem w jaki sposob sie za to wziąć. Wiec chciałbym poznać jak Wy rozwiazujecie tą kwestie.
Go to the top of the page
+Quote Post
hawk
post
Post #74





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


OT: router naprawdę zrobił karierę (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
jaco
post
Post #75





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

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


Cytat
Sprawa 1. rejestr obiektow ? co o tym sadzicie... ? U mnie wyglada to mniejwiejcej tak:


Ju dawno o tym wspominalem, u mnie wyglada to troszke inaczej:

[php:1:5756255a0d]<?php
$cos_tam = $reg->get('comments/tbl_name', 'news');
?>[/php:1:5756255a0d]

Gdzie news to nazwa drzewa glownego, dalej mozna tworzyc strukture bez ograniczenia poziomu zaglebienia. Jest tez przegladarka, ktora nazwalem... regedit (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Jest jeszcze oczywscie $reg->set ktory update'uje jezeli klucz jest, w przeciwnym wypadku dodaje nowy - a teraz zastanawiam sie jak przyjemnie zrobic usuwanie...
Go to the top of the page
+Quote Post
hawk
post
Post #76





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Hawk: wg mnie router jesli chcemy jakis "latwy" url do wywolywania akcji jest niezbedny.

Wiem że jest niezbędny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Moja uwaga spowodowana była tym, że ja w różnych oficjalnych materiałach dot. MVC z routerem się nie spotkałem. Pewnego razu chyba wymyśleliśmy z Sethem na GG i daleki jestem od przypisywania nam/sobie jakiś zasług czy odkryć, ale koncepcja routera mocno się trzyma.

Chociaż ja widzę router inaczej niż ty. Bo piszesz o wzorcach URLi, przypisanych do akcji. A dla mnie podstawowym zadaniem routera jest podanie nazwy akcji -> więc musi zrobić swoje przed wykonaniem akcji. Potrzebujesz różne wzorce dla różnych akcji (czyli zapewne różne schematy URLi)? Bo tak jak ja to teraz mam, router zwraca właśnie nazwę akcji + tablicę parametrów które znalazł w URLu.
Go to the top of the page
+Quote Post
Seth
post
Post #77





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Co prawda nie robilem tego do modelu MVC, a do drzewek ale wykombinowalem to w ten spsob, ze skrypt sprawdza po kolei czy pierwsze elementy znajduja si ew sciezce - czy istnieje wogole taki element - i tak w gore szedlem do momentu az danego elementu nie bylo. W tedy reszte ze sciezki przekazywalem jako parametry.

Czyli gdy mamy np /cos/cos2/test/12 sprawdzamy po kolei czy mamy modul/akcje cos, a w nim pod modul/akcje cos2, a w nim podmodul/akcje test itd. Jezeli nie nie bedziemy mieli takiego modulu/akcji to uznajemy, ze ostatnio znaleziony element jest akacja i przekazujemy mu pozostale dane.

Malo to wydajne ale cos... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
hawk
post
Post #78





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Ano wlasnie, wiec jak ta tablice parametrow odnajdujesz w urlu ?

Zalozmy ze chce miec:

index.php/news/15

gdzie news to nazwa akcji a 15 to id newsa.

No to załóżmy że pierwsza rzecz po slashu to nazwa akcji, a druga to parametr. Routera nie obchodzi co ten parametr oznacza, to sprawa akcji.
Nie mówię że jest to super elastyczne, ale działa.

Poza tym, pamiętaj że router tak naprawdę powinien działać w obie strony. Znajdywanie parametrów w URLu to jedno, ale tworzenie URLa mając nazwę akcji i parametry też jest potrzebne. Inaczej i tak będziesz musiał zakodować na sztywno jakiś schemat w aplikacji, chociażby w linkach rozsianych po szablonach. A w przypadku, gdy każda akcja może kodować swoje parametry w inny sposób, router ma ciężkie zadanie.

W routerze właśnie chodzi mi o to, że jak dochodzisz do wniosku że jakiś schemat URLi ci nie odpowiada, a ktoś wymyslił coś bardziej eleganckiego, zamieniasz jedną klasę i cała aplikacja chodzi na nowym schemacie, bez zmiany ani jednej linijki. Taka przynajmniej jest teoria :wink: .
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #79





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


do tego o czym mowicie wykorzystuje sie standard. xlinks. Po co wymyslac cos na nowo?
Go to the top of the page
+Quote Post
hawk
post
Post #80





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Cytat
Hawk a myslales moze nad alternatywnym przekazywaniem parametrow w urlach ? Za pomoca sesji czy bo ja wiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Tak by w urlu znajdowala sie wylacznei nazwa akcji. ?

A po co?
Skoro stawiam na router to mam pewność że engine będzie współpracować z czymkolwiek co ktoś sobie wymyśli. Mam ten komfort że mogę sobie to zupełnie ignorować i wiem że aplikacji mi nie zepsuje. :wink:
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #81





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


serafin:
"The XLink specification [XLink] defines ways for XML documents to establish hyperlinks between resources." - cytat ze specyfikacji. Jesli to ma sie nijak do tematu waszej rozmowy, to przepraszam.
Go to the top of the page
+Quote Post
Bora
post
Post #82





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

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


gdzie można sie dokłądniej zapoznac z model'em 3 ?W szczególności chodzi o nowe elementy pośredniczące.
Go to the top of the page
+Quote Post
Balin
post
Post #83





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

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


Byla tutaj mowa o IF, zapoznalem sie wstepnie z opisem tego wzorca na stronach javy, ale nadal nie pojmuje sensu jego dzialania. Byloby fajnie, gdyby ktos bardziej rozeznany napisal na forum 'z czym to sie je' (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
bela
post
Post #84


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


co samo jądro powinno robić? nie pytam się o cały cms tylko o konkretną klase/klasy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Neotion
post
Post #85





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 13.09.2004

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


Myślę że jądro musi kontrolować dostęp do danych, kierować obsługą plików, bazą danych, konfiguracją. W php jest o tyle łatwo że nie trzeba kontolować sprzętu na serwerze.
Go to the top of the page
+Quote Post
Lame
post
Post #86





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 29.10.2004

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


Zajrzyj tutaj: http://forum.php.pl/index.php?showtopic=13770&st=100
Hwao zapodał tam kod jądra, poczytaj o MVC, też właśnie wgłębiam się powoli w podobne zagadnienia więc nic więcej Ci póki co nie powiem.
Go to the top of the page
+Quote Post
halfik
post
Post #87





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

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


Cytat(Neotion @ 2004-11-03 15:24:33)
Myślę że jądro musi kontrolować dostęp do danych, kierować obsługą plików, bazą danych, konfiguracją. W php jest o tyle łatwo że nie trzeba kontolować sprzętu na serwerze.

dokladnie.

jadro jest swego rodzaju szefem z najwyzszej polki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) tak jak w firmie, szef siedzi i zarzadza cala reszta. moze kontrolowac innych szefow a ci ludzi lub bezposrednio ludzi, w kazdym badz razie sam niczego nie robi, jedynie kontroluje i wydaje polecenia (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) a za szczegoly odpowiadaja w roznym stopniu ludzie na roznych szczeblach w hierarchii (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Sito_s
post
Post #88





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 9.03.2005
Skąd: A kogo to odchodzi??

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


Mam pytanie. Czy jest jakaś książka która wprowadzi na wasz poziom, bo jest on bardzo zaawansowany. Naprzykład wydawnictwa HELION. Chciałbym wzbogacić umiejętności (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Vengeance
post
Post #89





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Tak. Ta książka zwie się forum.php.pl (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
A pozatym to praktyka mistrzu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Sito_s
post
Post #90





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 9.03.2005
Skąd: A kogo to odchodzi??

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


To znaczy pisać umiem i nawet zacząłem pisać stronkę ze sklepem (z koszykiem). Tylko że niekapie wszystkich pojęć, które używacie. A ty Vengeance ile piszesz w php? Bo ja od niecałego roku (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował Sito_s 22.03.2005, 15:15:57
Go to the top of the page
+Quote Post
tyfusek
post
Post #91





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 16.12.2003
Skąd: z kosmosu

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


(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
tutorial MVC dla początkujacych(w. ang)
http://www.zend.com/zend/tut/tutsweatpart1.php
Go to the top of the page
+Quote Post
bela
post
Post #92


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Cytat(Sito_s @ 2005-03-22 15:14:12)
To znaczy pisać umiem i nawet zacząłem pisać stronkę ze sklepem (z koszykiem). Tylko że niekapie wszystkich pojęć, które używacie. A ty Vengeance ile piszesz w php? Bo ja od niecałego roku (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Napisz których pojęć nie rozumiesz, a my postaramy się je wytłumaczyć (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Sito_s
post
Post #93





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 9.03.2005
Skąd: A kogo to odchodzi??

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


Narazie tyle bo nie doczytałem całego teamtu. np:

Singleton, do czego słurzy metoda instance() i co oznacza ten zapis = &DB:get_DB(). W szczegłólności ten dwókropek. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
bela
post
Post #94


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Singleton - wzorzec projektowy, odsyłam do wyszukiwarki, googla

:: oznacza, że chcemy użyć metody statyczne, odsyłam do manuala, na zend.com też jest kilka artykułów

(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
aleksander
post
Post #95





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


niedługo pojawi się na php.pl artykuł o singletonie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Sito_s
post
Post #96





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 9.03.2005
Skąd: A kogo to odchodzi??

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


Fajnie dzięki, jak coś jeszze znajde to napisze (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Diablos
post
Post #97





Grupa: Zarejestrowani
Postów: 165
Pomógł: 6
Dołączył: 17.06.2005

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


Cytat
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)


Mógłby ktos opisac mi po kolei do czego one wszystkie słuzą ? :|
Go to the top of the page
+Quote Post
NuLL
post
Post #98





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Przecież jest opis na początku.
Go to the top of the page
+Quote Post
Rast/Abaddon
post
Post #99





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.07.2005

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


| Poziom | Podzial | pliki | Opis |

USER | Nakladki | *.skin | Nakladki wizualne na system

SYS/USER | Moduly | *.mod | Moduly spelniajace okreslone funkcje typu client/server rozne platformy

SYSTEM | Biblioteki | *.lib | funkcje i biblioteki systemu

SYSTEM | System | ***** | Jadro systemu

1. Sprawdzanie poziomow na ktorym pracuje dany modul/biblioteka.
2. Jadro zcentralizowane ale tzw. mikrojadro
3. Wyniesienie poza jadro testow uprawnien.
4. Niezalezne dzialanie modolow lub wspolne.
5. Udostepnianie uslug przez moduly
6. Itd...

Projekt w trakcie tworzenia.

(IMG:http://forum.php.pl/style_emoticons/default/cool.gif)
Go to the top of the page
+Quote Post
berdyk
post
Post #100





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 30.05.2003

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


Cytat(Rast/Abaddon @ 2005-07-27 09:16:49)
USER | Nakladki  | *.skin |  Nakladki wizualne na system

rozumiem że w tym miejscu mogło by być coś w rodzaju *.tpl

Cytat(Rast/Abaddon @ 2005-07-27 09:16:49)
SYS/USER |  Moduly | *.mod |  Moduly spelniajace okreslone funkcje typu client/server rozne platformy

SYSTEM |  Biblioteki | *.lib |  funkcje i biblioteki systemu

SYSTEM |  System  | ***** | Jadro systemu

1. Sprawdzanie poziomow na ktorym pracuje dany modul/biblioteka.
2. Jadro zcentralizowane ale tzw. mikrojadro
3. Wyniesienie poza jadro testow uprawnien.
4. Niezalezne dzialanie modolow lub wspolne.
5. Udostepnianie uslug przez moduly
6. Itd...


Mógłbyś nieco rozwinąć temat. Wszystko o czym tu mówicie jest nieco zagadkowe, jabyście pisali sami dla siebie byle by pisać (sztuka dla sztuki).

Staram sie coś zrozumieć i nauczyć a tu hebrajszczyzna (IMG:http://forum.php.pl/style_emoticons/default/graduated.gif) :?:
Go to the top of the page
+Quote Post

7 Stron V   1 2 3 > » 
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: 13.06.2026 - 06:35