Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

9 Stron V  « < 7 8 9  
Reply to this topicStart new topic
> [MVC] Pytań kilka...
LBO
post 15.09.2006, 21:43:08
Post #161





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Eeesshh, w Zend Framework jeszcze apletów nie wprowadzili :/ Chociaż w SVN jest już Zend_Acl i zarządzanie uprawnieniami jest łatwiejsze. Będzie trzeba się posiłkować zmiennymi dopisanymi do szablonu.
Go to the top of the page
+Quote Post
Apo
post 15.09.2006, 22:42:03
Post #162





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


W ZF są helpery, a u mnie dziala to na tej samej zasadzie tyle że jak już mówiłem Aplet ma dostęp do HttpContext, klasy Usera, Modelu itp, a zwykły helper takich żeczy nie ma smile.gif
Go to the top of the page
+Quote Post
LBO
post 16.09.2006, 11:23:44
Post #163





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


No nie wiem, nie wydaje mi się, że helpery mogą służyć do tego. Aplet to aplet (czy komponent jak kto woli). Ale można się pokusić o napisanie czegoś podobnego.

Kontekst można uzyskać łatwo:
  1. <?php
  2. Zend_Controller_Front::getInstance(); // Na takiej zasadzie działa Zend_View_Helper_Url - jeszcze w inkubatorze.
  3. ?>

Dostęp do dodatkowych klas i modułów również:
  1. <?php
  2. Zend::register(); // zapisywanie OBIEKTU w rejestrze Frameworka
  3. Zend::registry(); // odczytywanie OBIEKTU z rejestru.
  4. ?>


Cytat
tyle że jak już mówiłem Aplet ma dostęp do HttpContext, klasy Usera, Modelu itp, a zwykły helper takich żeczy nie ma


Heeh, ale kontrolery też nie, przyzwyczaiłem się, że w tej fazie projektu, szkielet aplikacji trzeba stworzyć samemu.

Ten post edytował LBO 16.09.2006, 11:29:05
Go to the top of the page
+Quote Post
Prph
post 17.09.2006, 11:36:16
Post #164





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

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


Cytat(Apo @ 15.09.2006, 21:42:03 ) *
W ZF są helpery, a u mnie dziala to na tej samej zasadzie tyle że jak już mówiłem Aplet ma dostęp do HttpContext, klasy Usera, Modelu itp, a zwykły helper takich żeczy nie ma smile.gif


Podobnie u mnie, ale helpery maja dostep do aktualnego widoku (tj. do widoku, ktory je wywoluje). Dodalem taka funkcjonalnosc, poniewaz byla mi potrzebna. Mam dwa helpery - css oraz js - ktore pozwalaja zaladowac css i javascript do szablonu. Mowa tutaj o widoku dekorujacym, w ktorym mam szablon glowny (Main.php) zawierajacy np. naglowek, menu itp.

Zachecam do zapoznania sie z moim frameworkiem Rapide. Pisalem o nim na forum Temat: Framework Rapide Framework. W skrocie powiem, ze Rapide jest podobny do Zend Framework, poniewaz organizacja zostala oparta na tej spotykanej w ZF. Framework jest znacznie bogadszy od ZF i zawiera m.in. aplety, helpery, acl, user, language.

Pozdrawiam, Adrian.
Go to the top of the page
+Quote Post
Jarod
post 24.11.2006, 18:40:34
Post #165





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(rzseattle @ 28.01.2004, 16:03:04 ) *
(...)
1) Router "dekoduje" url i wysyla do kontrolera jak akcje ma uruchomic
2) Kontroler sprawdza czy akcja potrzebuje zalogowania , czy jest plik akcji itd...
3) Kontroler uruchamia akcje.
(...)

Kontroler to nic innego jak switch
  1. <?php
  2. switch(intval($_GET['wartosc_parametru']))
  3. {
  4. case 1:
  5. case 2:
  6. case 3:
  7.  etc..
  8. }
  9. ?>

czyli router i kontroler to jest to samo.. :/


Cytat(bumelang @ 4.02.2004, 15:30:08 ) *
(...)
Działa to tak: użytkownik wysyła żądanie w sensie HTTP, np. wypełnia jakiś formularz i klika "Submit", gdzie akcja formularza jest ustawiona na skrypt, w którym znajduje się kontroler. Ten łączy się z modelem, wywołuje tam jakieś metody biznesowe i gdy te zwrócą mu już efekty swojej pracy, to w zależności od tego, jakie one są, przekazuje to wywołanie do odpowiedniego widoku, czyli odpowiedniej strony php (która może być napisana w Smarty). W php w najprostszym wariancie może być to po prostu
  1. <?php
  2. /* Kontroler */
  3. if($model->zaloguj($login, $haslo) == SUCCESS) //wywołanie modelu
  4. include("strona_glowna.php"); // wywołanie widoku
  5. else
  6. include("blad.php"); // wywołanie innego widoku
  7. ?>

(...)

Z całym szacunkiem ale ja dopiero zagłębiam się w MVC. Rozważmy inny przykład:
Na stronie index.php pojawia się tylko okienko logowania. Jeśli login i hasło są prawidłowe to użytkownik sotaje przenoszony do system.php, gdzie ma dostęp do modułów (tylko do tych na które pozwalają uprawnienia przypisane danemu użytkownikowi w bazie danych).

Jakby to wyglądało?
1. Uruchamiany jest widokLogowanie
-użytkownik wpisuje login i hasło po czym naciska submit
2. Kontroler pobiera login i hasło i przekazuje do modelu w formie zalogujUser($login, $haslo);
3. Jeśli dane są poprawne to pobierz uprawniena danego usera i załaduj widokSystem
- w przeciwnym wypadku wyświetl WidokBłąd

Dobrze myślę? Czyli widok jest wywoływany jeszcze zanim kontroler sprawdzi podejmie decyzje o logowaniu..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
mariuszn3
post 24.11.2006, 18:41:53
Post #166





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Router jest częścią kontrolera, która tłumaczy url na zmienne na podstawie których dalszy algorytm kontrollera wywołuje akcję.
Go to the top of the page
+Quote Post
NuLL
post 24.11.2006, 18:54:59
Post #167





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

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


Cytat(mariuszn3 @ 24.11.2006, 18:41:53 ) *
Router jest częścią kontrolera, która tłumaczy url na zmienne na podstawie których dalszy algorytm kontrollera wywołuje akcję.

Router nie powinien byc czecia kontrolera gdyz z adresu mozna wyciagnac troche wiecej niz tylko akcje do wykonania. Router powinien nalezyc do requestu i z adresu wyciagac zmienne getowe.

EDIT - teraz zalapalem tongue.gif

Ten post edytował NuLL 24.11.2006, 20:11:17


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
mariuszn3
post 24.11.2006, 19:03:43
Post #168





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


NULL myślę, że za bardzo rozwarstwiasz pewne rzeczy.. jeśli nie częścią kontrolera to częścią czego? Widoku czy Modelu?
Kiedy piszę o kontrolerze piszę o jednej z trzech warstw abstrakcji, która odczytuje żądanie (którego nośnikiem jest między innymi adres url) a nie o konkretnej jednej klasie.

Ten post edytował mariuszn3 24.11.2006, 19:04:31
Go to the top of the page
+Quote Post
Jarod
post 24.11.2006, 20:02:23
Post #169





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(Seth @ 17.12.2004, 13:12:42 ) *
@hamlecik:
Ja to robie w ten sposob:
Mam jeden glowny kontroler, ktory pobiera dane od usera i na ich podstawie odpala odpowiednia akcje, ktora jest w konfigu.

I za każdym razem, kiedy wywoływana jest akcja odczytujesz konfiga? Czy to nie zwalnia aplikacji?
Czy może gdzieś na samym początku (ale gdzie?) parsujesz konfiga i każdy parametr ustawiasz jako zmienną sesyjną, żeby nie gubic przy przeładowaniach strony?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
UDAT
post 26.11.2006, 13:12:37
Post #170





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


Cytat(J4r0d @ 24.11.2006, 20:02:23 ) *
I za każdym razem, kiedy wywoływana jest akcja odczytujesz konfiga? Czy to nie zwalnia aplikacji?
Czy może gdzieś na samym początku (ale gdzie?) parsujesz konfiga i każdy parametr ustawiasz jako zmienną sesyjną, żeby nie gubic przy przeładowaniach strony?

Raz. Wystarczy cache'owanie konfiga.
Ustawianie jako zmiennej sesyjnej mija się z celem, zmiana conifg'u może nastąpić teraz jednak dopiero za np. 12h zmienii się to dla user'a który będzie mocno używał twoją aplikację.

Dwa. Jak trzymasz konfiga w bazie to zapis do zmiennych sesyjnych jest nieopłacalny wydajnościowo, możesz mieć ogromnego config'a ale potrzebować 1% danych z niego.
Go to the top of the page
+Quote Post
Jarod
post 26.11.2006, 13:15:54
Post #171





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(UDAT @ 26.11.2006, 13:12:37 ) *
Raz. Wystarczy cache'owanie konfiga.

Ale odczyt z pliku co jakąś akcje też obciąża.

Cytat(UDAT @ 26.11.2006, 13:12:37 ) *
Ustawianie jako zmiennej sesyjnej mija się z celem, zmiana conifg'u może nastąpić teraz jednak dopiero za np. 12h zmienii się to dla user'a który będzie mocno używał twoją aplikację.

Wyjaśnij to bo zamotałeś i nie wiem o co Ci chodzi..

Cytat(UDAT @ 26.11.2006, 13:12:37 ) *
Dwa. Jak trzymasz konfiga w bazie to zapis do zmiennych sesyjnych jest nieopłacalny wydajnościowo, możesz mieć ogromnego config'a ale potrzebować 1% danych z niego.

Tu się zgodze..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
NuLL
post 26.11.2006, 17:57:53
Post #172





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

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


Cytat
Ale odczyt z pliku co jakąś akcje też obciąża.

Tysieczne czesci sekundy winksmiley.jpg


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Jarod
post 2.12.2006, 11:16:30
Post #173





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Zauważyłem w swoich projektach, że duża część kodu powtarza się. Przyglądałem się frameworkom, które były prezentowane przez użytkowników tego forum jak i innym. Podoba mi się np, Rapide ale jak na razie jest za duży dla moich potrzeb. Chcę spróbować napisać sobie zestaw kilku prostych klas i zaimplementować MVC. Czytałem ten temat mnóstwo artykułów i każdy inaczej rozumie ten wzorzec. Spróbuje zebrać to co zrozumiałem - jeśli się mylę to mnie poprawcie:

1. Model - odpowiedzialny za logikę biznesową, jest jedyną częścią aplikacji, która przechowuje dane. Sposób przechowywania jest obojętny (baza, plik, itp.) Dobrym sposobem implementacji modelu jest utworzenie odzielnej klasy dla każdego logicznego obiektu, np. klasa Produkty, która będzie pobierać dane o produktach lub klasa Uzytkownicy, która będzie pobierać listę zarejestrowaych użytkowników... Jeśli dane są przechowywane w bazie danych, zazwyczaj jedna klasa odpowiada jednej tabeli lub kilku tabelom ściśle powiązanych ze sobą.

Spotkałem się też z twierdzeniem, że dobrze zaprojektowany model powinien być odporny na wewnętrzne zmiany w strukturze tabel bazy. I tu uważam, że jest to ciężkie do zrealizowania. Bo jeśli klasa Użytownicy pobiera dane wskazanego użytkownika (np. imie, nazwisko, pesel, data zarejestrowania itp, to po zmianie struktury trzeba zmieniać zapytanie..)


Widok - odpowiada za prezentacje danych. Wykorzystuje model do pobrania danych. Widok powinien utworzyć instacje klas modelu i wywołać metody odpowiedzialne za pobranie danych. Widok nie może modyfikować danych. Widok nie jest szablonem, pobiera dane i includuje odpowiedni szablon.

Kontroler - na podstawie analizy żądania http powinien zdecydować jakie akcje wykonać i jaki widok wyświetlić. Kontroler to jeden główny plik zbudowany na switchu..


PYTANIA:
1. Jeśli widok nie może zmieniać danych, to jak odbywa się aktualizacja (np. zmień hasło użytkownikowi) ?

Kontroler odbiera żądanie zmień hasło i wywołuje odpowiednią akcje, która uruchamia widok z formularzem zmiany hasła. Ten formularz wywołuje.. co? Znowu kontroler czy inną akcje, która zmienia hasło i odpala widok z komunikatem udanej zmiany/nieudanej zmiany ?

2. Wiele z osób torzy jeszcze klasy Request i Response. Po co?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
NuLL
post 4.12.2006, 13:12:05
Post #174





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

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


Cytat
Kontroler to jeden główny plik zbudowany na switchu..

laugh.gif U mnie projekcie wartwa kontrolera to 8-10 klas - zalezy od jego konfiguracji

Ja warstwy modelowej nie stosuje wiec sie nie znam winksmiley.jpg

Cytat
2. Wiele z osób torzy jeszcze klasy Request i Response. Po co?
Nikt ich nie wymaga. A po co je sie robi questionmark.gif Aby zadanie HTTP mialo ladna otoczke.

Ten post edytował NuLL 4.12.2006, 13:17:07


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Sh4dow
post 4.12.2006, 15:36:23
Post #175





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

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


Cytat(J4r0d @ 2.12.2006, 11:16:30 ) *
...
1. Jeśli widok nie może zmieniać danych, to jak odbywa się aktualizacja (np. zmień hasło użytkownikowi) ?

Kontroler odbiera żądanie zmień hasło i wywołuje odpowiednią akcje, która uruchamia widok z formularzem zmiany hasła. Ten formularz wywołuje.. co? Znowu kontroler czy inną akcje, która zmienia hasło i odpala widok z komunikatem udanej zmiany/nieudanej zmiany ?

2. Wiele z osób torzy jeszcze klasy Request i Response. Po co?

ad. 1 Sam napisałeś Model zajmuje sie całą logiką, On otrzymuje polecenie wykonania zmiany hasła, zwraca powiedzmy wartosc bool ktora okresla czy sie to udalo czy nie a widok na tej podstawie podaje wiadomosc z potwierdzeniem lub błędem.

ad. 2 Jesli chodzi klasy Request/Response to czesto jest to połączone z jakimiś filtrami, validatorami. Pobierajac jakas dane powiedzmy POST mozesz rzadac ze to ma byc liczba i jesli sie nie zgadza zwracasz false/null/error (dowolnie, w zaleznosci od uznania) lub tez mozesz przefiltrować zmienna i wszystkie nie cyfry wywalici znowu cos tam zwrocic.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
Jarod
post 4.12.2006, 18:04:24
Post #176





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Początkowo kontroler wydawał mi się najłatwiejszy (myliłem się). Dorwałem frameworka i załapałem widok, model i jak to działa. Wiem jak ogólnie działa kontroler ale nie mogę załapać jak napisać i połączyć w wspólne działanie Request/Response.. :/

Mógłby mi to ktoś wyłumaczyć prostym przykłądem (dwie przykładowe klasy i jak to połączyć)?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
jastu
post 8.01.2007, 14:24:57
Post #177





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


Przyłącze się do prośby ... ja jestem juz po wybieraniu z urla potrzebnych informacji,operowania na nich , problem mam natomiast z generowaniem wyniku operacji .


//edit
Jak klasa specjalizująca może dodawać funkcjonalności nadklasie ? (jeśli dobrze rozumiem o co chcę zapytać )

Czy mógłby ktoś naszkicować diagram (uml) do elementu głównego dla wzorca MVC ( np obiekt page jako obiekt który powstaje z innych klas dzięki dziedziczeniu,kompozycji bądź innch) , poglądowy - jak połączyć klasy ? . Rozumiem częściowo jak klasy mogą przekazywać sobie wyniki operacji na obiektach , ale jeszcze mi czegoś brakuje

Ten post edytował jastu 9.01.2007, 13:03:15


--------------------
Powyższy post wyraża jedynie opinię autora w dniu dzisiejszym. Nie może on służyć przeciwko niemu w dniu jutrzejszym. Ponadto autor zastrzega sobie prawo zmiany poglądów, bez podawania przyczyny.
Go to the top of the page
+Quote Post

9 Stron V  « < 7 8 9
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 01:27