![]() |
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: 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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 23:05 |