![]() |
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.
![]() |
![]()
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 ? |
|
|
![]() |
![]()
Post
#2
|
|
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 20:53 |