[MVC] Pytań kilka... |
[MVC] Pytań kilka... |
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.
|
|
|
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
|
|
|
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:
Dostęp do dodatkowych klas i modułów również:
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 |
|
|
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%) |
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 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. |
|
|
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%) |
(...) 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
czyli router i kontroler to jest to samo.. :/ (...) 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
(...) 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) |
|
|
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ę.
|
|
|
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%) |
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 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 :)
|
|
|
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 |
|
|
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%) |
@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) |
|
|
26.11.2006, 13:12:37
Post
#170
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%) |
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. |
|
|
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%) |
Raz. Wystarczy cache'owanie konfiga. Ale odczyt z pliku co jakąś akcje też obciąża. 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.. 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) |
|
|
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 -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
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) |
|
|
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.. U mnie projekcie wartwa kontrolera to 8-10 klas - zalezy od jego konfiguracji Ja warstwy modelowej nie stosuje wiec sie nie znam Cytat 2. Wiele z osób torzy jeszcze klasy Request i Response. Po co? Nikt ich nie wymaga. A po co je sie robi 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 :)
|
|
|
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%) |
... 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 |
|
|
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) |
|
|
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.
|
|
|
Wersja Lo-Fi | Aktualny czas: 16.06.2024 - 14:01 |