Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 0 Dołączył: 5.09.2003 Skąd: Kielce Ostrzeżenie: (0%)
|
Ponieważ nie mam dostępu do forum DEV, a wiem, że tam po części problem MVC był poruszany, postanowiłem zadać kilka pytań.
Coraz więcej mówi/pisze się na temat MVC (Model-View-Controller) ale pomimo usilnych starań nie mogę zrozumieć pewnych mechanizmów, tymbardziej, że większość przykładów podawanych jest w Java'ie. Może zacznę od tego co już wiem, jeśli się mylę, proszę poprawcie mnie. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cała aplikacja składa się z trzech części: :arrow: Kontrolera, który odbiera operacje z zewnątrz (input) i odpowiednio je przetwarza, wywołując konkretny model (modułu) i metodę tegoż modelu. Może również odwoływać się bezpośrednio do widoku. :arrow: Modelu, który jest niejako modułem odpowiedzialnym za jakiś ułamek pracy aplikacji (menu, news, sonda itp, itd.). Także jak widać w przeciwieństwie do kontrollera istnieje wiele modeli. Jak wcześniej wspomniałem model odbiera od kontrolera odpowiednie rządania, przetwarza je i wynik może przesłać do widoku. :arrow: Widok natomiast wszystkie dane wysłane z modelu lub kontrolera wysyła na zewnątrz (wyświetla wynik na WWW, tworzy dokument XML, PDF itp.). Tak więc może być kilka podwidoków, które wywołane przez widok głowny tworzą efekt końcowy widoczny dla użytkownika. A teraz czas na pytania: * w jaki sposób elementy te komunikują się? * wiem, że najbardziej naturalnie będzie zastosować programowanie obiektowe, ale czy da się to zrobić strukutralnie? * co jest w przypadku gdy jeden model jest zależny (potrzebuje danych) od drugiego modelu? * czym są akcje (actions) i łańcuchy (chains)? Jeśli coś pominąłem, proszę dopiszcie, Myślę, że dyskusja na ten temat wpłynie w jakimś stopniu na rozpowrzechnienie tego rozwiązania, a chyba na tym nam zależy, aby łatwiej tworzyć aplikacje webowe i w przyszłości korzystać z już napisanego kodu... |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 21.08.2003 Skąd: Będzin Ostrzeżenie: (0%)
|
Cytat 1) Czy mam w takim razie do kontrolera, oproocz $model i $view dodać np. obiekt $action , który będzie działał na modelu? czy po prostu do samego modelu dodac odpowiednie metody?
Do kontrolera nie dodajesz modelu... to w akcji/widoku sobie tworzysz instancje jednego modelu.. lub więcej, jeśli masz taką potrzebę. Wprowadziłem tutaj podział na obiekty action i view podobnie jak w phiend - te pierwsze to akcje logiki - odpowiadają za modyfikację danych (tak, operują na modelu, który posiada metody dodajElement, zmieńElement itp), a te drugie to akcje widoku - odpowiadają, za zwracanie danych klientowi - wyświetlanie, przekierowanie do innej strony itp (również operują na modelu, korzystają z metod typu np:zwróćListęProduktów, zwróćProdukt itd). Może przykładowy kod (phiend) ;>] [php:1:4e23e0d6b9] <?php class ActionUpdateProduct extends Action { function perform() { $data['ID'] = $_GET['ProductID']; $data['price'] = $_POST['ProductPrice']; $data['name'] = $_POST['ProductName']; $product = new Product($_GET['ProductID']); $product->updateProduct($data); return 'ViewProduct'; } } class ViewProduct extends Action { function perform() { $product = new Product($_GET['ProductID']); $data = $product->getAsArray(); // i tutaj wyświetlanie produktu // [..] return true; } } ?> [/php:1:4e23e0d6b9] Cytat 2) A moze po prostu w modelu owszem, dopisac metody usuwania itd... a potem w kontrolerze - odpowiadające im, ale juz przekazujące identyfkatory i dane? - czy tak bedzie dobrze?
Kontroler służy jedynie do wybierania, którą akcję/widok ma 'uruchomić', tworzenia sesji, autoryzacji i sprawdzania, czy dany user ma uprawnienia do odpalenia danej akcji itp, natomiast nie ma nic wspólnego z modelem (yhm... jedynie np: mechanizm autoryzacji musi korzystać z modelu User, ale to już troche inna para kaloszy) Cytat 3) Jeszcze jedna sprawa: Tak mi sie wydaje, ze jak robie strone w MVC to:
powinien byc 1 kontroler - ktoory by wszystko tworzyl, ustawial, usuwal itd... modele : odpowiedzialny za baze danych, odpwiednie do newsoow itd.. , widoki : prezentacje kazdego z modeli do newsoow itd... Dokładnie... Cytat Teraz tak:
czy nie powienien byc jeszcze jeden model i odpowiadajacy mu widok : np. o nazwie SiteModel i SiteView - ktoore odpowiadaly by za cala strone? i np: SiteView to cos takiego: [..] Czy to jest dobre rozwiązanie? IMHO nie bardzo... operując na MVC w stylu phiend, to zrobiłbym raczej klasę rodzica, a każdy widok aby dziedziczył po tej klasie: [php:1:4e23e0d6b9] <?php Class SiteView extends Action { function Header() { // naglowek <html> itd... } function Footer() { // /html itd... } } Class ViewProduct extends SiteView { function Display() { $this->header(); // tutaj inicjowanie modelu, zbieranie danych itp // i następnie ich prezentacja $this->footer(); } } ?>[/php:1:4e23e0d6b9] ...albo drugie rozwiązanie (i to może być bardziej elastyczne) - zrobić widoki Header i Footer i wtedy (znowu - phiend) [php:1:4e23e0d6b9]<?php Class ViewProduct extends Action { function Display() { $this->_callAction('header'); // tutaj inicjowanie modelu, zbieranie danych itp // i następnie ich prezentacja $this->_callAction('footer'); } } ?>[/php:1:4e23e0d6b9] |
|
|
|
Zepco [MVC] Pytań kilka... 27.01.2004, 23:49:48
rzseattle No wiec tak sorry ale odpowiem nie po kolei :
ad ... 28.01.2004, 06:44:34
radziel Re: [MVC] Pytań kilka... 28.01.2004, 09:45:57
rzseattle Re: [MVC] Pytań kilka... 28.01.2004, 13:51:40
radziel Re: [MVC] Pytań kilka... 28.01.2004, 14:11:11
Zepco CytatNo wiec tak sorry ale odpowiem nie po kolei :... 28.01.2004, 15:50:32
rzseattle CytatNie wiem czy dobrze rozumiem, ale w pliku kon... 28.01.2004, 16:03:04
Zepco Specyfikacja URLa oczywiście nie ma znaczenia i za... 28.01.2004, 18:20:48
radziel CytatSpecyfikacja URLa oczywiście nie ma znaczenia... 28.01.2004, 18:32:24
rzseattle CytatSpecyfikacja URLa oczywiście nie ma znaczenia... 28.01.2004, 18:39:50
kubatron A mógłbym zapytać gdzie to można ściagnąć jak zain... 28.01.2004, 21:10:05
scanner Jeden z dostępnych: http://phiend.sourceforge.net 28.01.2004, 21:48:24
Nalfein][WR CytatNie wiem czy dobrze rozumiem, ale w pliku kon... 29.01.2004, 13:49:18
bumelang CytatJak juz wspomnialem model jest klasa tworzaca... 4.02.2004, 00:15:33
rzseattle Cytatzaś całość logiki zawiera się w modelu.
Musz... 4.02.2004, 00:48:46
bumelang Wszystko wskazuje na to, że mamy odmienne pojęcia ... 4.02.2004, 09:54:56
rzseattle CytatWarstwa druga, która jest najczęściej modelem... 4.02.2004, 11:22:27
bumelang Być może to jest OT, ale nie wiem, czy można nazwa... 4.02.2004, 11:46:58
Zepco Jak dla mnie takie OT mogą być, o ile mieszczą się... 4.02.2004, 12:18:48
Sh4dow Moze troche sie wtrącam do waszej zrozmowy, ale mo... 4.02.2004, 12:55:15
hawk CytatJak napisal scanner ze jeden z takich MCV jes... 4.02.2004, 15:22:33
bumelang CytatTak na marginesie chciałem zapytać skąd czerp... 4.02.2004, 15:30:08
DeyV jak już trwa taka zaciekła rozmowa na temat MVC, ... 4.02.2004, 19:27:46
hawk Hmm, ciekawe...
Z tego co na razie widziałem, WACT... 4.02.2004, 22:22:12
scanner CytatHmm, jako autor phienda potwierdzam że proste... 4.02.2004, 22:58:39
cagrET CytatAnyway, gdzie tam jest założenie, że mamy jed... 5.02.2004, 01:41:57
Nalfein][WR CytatJeżeli dobrze doczytałem to doszli do wniosku... 6.02.2004, 15:57:13
hawk Minusów jest więcej:
- Co zrobić, jak tego pliku a... 6.02.2004, 17:25:01
Nalfein][WR Nie wywalili kontrolera, ale wywalili obiekt typu ... 6.02.2004, 21:57:31
hawk Ale warstwa kontrolera bez kontrolera?
To tak jak... 6.02.2004, 22:57:34
Nalfein][WR Chyba za dużo nad Phiendem przesiedziałeś To tak ... 7.02.2004, 12:28:19
cagrET Cytat- Co zrobić, jak tego pliku akurat nie ma? Ko... 7.02.2004, 14:28:31
hawk To w takim razie każda aplikacja w php jest oparta... 7.02.2004, 15:38:42
Sh4dow Hmm, tak szczerze mowiac, to kazda strona napisana... 7.02.2004, 17:03:06
Nalfein][WR CytatTo w takim razie każda aplikacja w php jest o... 7.02.2004, 17:35:12
KaGe Małe wtrącenie na część chyba bardziej toporną i praktyczną 11.05.2004, 00:05:41
marcin96 http://phppatterns.com/index.php/imagecata...clevi... 11.05.2004, 07:10:35
KaGe Kilka pytań 12.05.2004, 00:54:57
marcin96 ad 1) poczytaj dokumentacje phienda )
http://phie... 12.05.2004, 06:11:35
KaGe czyli jak? 12.05.2004, 22:39:58
KaGe Jeszcze jedna sprawa z MVC 13.05.2004, 23:27:38
marcin96 Re: Jeszcze jedna sprawa z MVC 14.05.2004, 08:38:47
KaGe Modele 16.05.2004, 01:22:32
hawk Nie rozumiem :? ArticleDataModel i ArticleModel ma... 16.05.2004, 09:27:50
KaGe OK 20.05.2004, 14:59:58
hawk Hmm, zaczynasz od końca... co nie jest jakąś szcze... 20.05.2004, 18:49:22
KaGe HeHe 26.05.2004, 09:30:05
Balin Ja mam pytanie o cos innego.
Wiadomo, ze niektore ... 23.06.2004, 14:01:04
gkeb Ostatnio troche dumałem nad MVC i w związku z tym ... 4.07.2004, 10:43:35
Zepco 1. Z tego co ja już zdążyłem się zorientować, to n... 4.07.2004, 10:52:58
rmn kurcze od jakiegos czasu probuje dowiedziec jak ... 15.07.2004, 22:10:03
Ozzy MVC jest dobre, ale....w Javie:) Przykład: Swing, ... 16.07.2004, 11:10:33
Ace Tak, tez mam takie wrazenie. Wyszedlem z zalozenia... 16.07.2004, 11:21:29
gkeb Tak sobie dumam i dumam i.... :
koncepcja 1:
1.wy... 25.07.2004, 23:01:49
marcin96 Żadna nie jest ;>)
1. index[*] odpala kontrole... 25.07.2004, 23:57:46
gkeb Hehe
Wiedziałem ze sie myle
W mojej koncepcji c... 26.07.2004, 16:11:51
hawk Oczywiście że model nie powinien korzystać z żadny... 26.07.2004, 21:12:51
gkeb Co do wielu kontrolerow to zauwaz ze to Marcin wla... 26.07.2004, 22:24:39
hawk Z tymi wieloma kontrolerami to Marcin raczej pisał... 27.07.2004, 11:00:25
marcin96 Cytat(hawk @ 2004-07-27 11:00:25)Z tymi wielo... 27.07.2004, 11:30:50
aleksander witam,
więc bez zbędnych wstępów parę pytań:
1.... 30.10.2004, 15:07:53
bela_666 Cytat1. nie wiem czy dobrze rozumuje: model to cze... 30.10.2004, 15:18:47
matid A czy taki przebieg pracy aplikacji jest zgodny z ... 30.10.2004, 15:54:58
aleksander ale teraz wywiązuj się pytanie: jeżeli dodam nową ... 30.10.2004, 18:25:26
ActivePlayer Nie wiem czy moja idea jest dobra ale czy mozna na... 30.10.2004, 21:03:23
matid Cytat(Olo @ 2004-10-30 19:25:26)ale teraz wyw... 30.10.2004, 21:29:47
aleksander no tak, ale jeżeli nowy widok bedzie kozystal z no... 30.10.2004, 21:43:19
dag ArticleModel:
- dodaj
- edytuj
- usun
- get title
... 30.10.2004, 22:32:32
hawk @ogólnie:
Nie ma sensu zastanawiać się, czy model... 31.10.2004, 20:55:35
Vengeance hmm no tak w MVC nigdy nie wnikalem ale teraz moje... 31.10.2004, 21:11:30
hawk Zaczynamy od tego, że mamy ten Article tak jak w t... 2.11.2004, 09:29:23
bela_666 hm dzis sobie w szkole myslałem o mvc i narysowałe... 8.11.2004, 22:39:22
hawk 1. Ja bym to zrobił tak, że Widok może dostać dane... 9.11.2004, 09:33:31
DeyV CytatJa bym to zrobił tak, że Widok może dostać da... 9.11.2004, 09:55:15
hawk @DeyV: ale phiend wcale nie ma routera. Ba, nie zn... 9.11.2004, 10:49:26
Vengeance to moze trzeba opatentowac bill ci opatentowal po... 9.11.2004, 14:17:48
bela_666 Cytat1. Ja bym to zrobił tak, że Widok może dostać... 9.11.2004, 16:51:40
dag bela_666 @ przeczytaj dokładnie artykuł o MVC na p... 9.11.2004, 17:12:40
bela_666 Cytat(dag @ 2004-11-09 18:12:40)bela_666 @ pr... 10.11.2004, 18:56:30
aleksander zapytania nie wymagające akcji: SELECT
zapytania w... 10.11.2004, 18:58:18
hawk @Bela:
Lepiej nie mówmy o zapytaniach, bo w MVC w... 11.11.2004, 09:34:32
bela_666 Cytat(hawk @ 2004-11-11 10:34:32)Lepiej nie m... 12.11.2004, 00:00:03
aleksander ok to mi jeszcze ukazał się taki oto problem:
wyo... 15.11.2004, 15:14:00
hawk Hmm, są dwie zasady:
1. Widok powinien być jeden.... 15.11.2004, 16:47:21
hamlecik Witam,
Mam taki maly OT. Otoz stworzylem sobie os... 17.12.2004, 11:15:45
Ludvik Kontroler z natury tego wzorca jest jeden.
CytatWy... 17.12.2004, 12:35:45
Seth @hamlecik:
Ja to robie w ten sposob:
Mam jeden glo... 17.12.2004, 13:12:42
hamlecik Seth: Wielkie dzieki za rozjasnienie mi sprawy, ch... 18.12.2004, 11:30:28
Seth Faktycznie troche zmodyfikowalem wzorzec ale inny ... 19.12.2004, 13:01:48
Vengeance Pora na moje pytanie
Dwa różne schematy działani... 31.12.2004, 15:35:43
bregovic U mnie to wyglada tak: Wyswietlamy temat:
FrontCon... 31.12.2004, 15:53:30
kurak Vengeance, co u Ciebie robi showTopic? 31.12.2004, 16:25:47
Vengeance to jest akcja wyswietlajaca to co widzisz teraz
t... 31.12.2004, 17:26:42
kurak A po co Ci i showTopic, i showTopicView? Przeciez ... 31.12.2004, 19:00:01
bregovic Zaraz, moment, akcja jest częścią kontrolera - i n... 31.12.2004, 19:07:42
kurak bregovic, sciagnij sobie pdf'a z artem hawka ... 31.12.2004, 19:12:40
bela_666 Cytat(kurak @ 2004-12-31 20:12:40)bregovic, s... 31.12.2004, 19:38:02
Vengeance @kurak :
Cytat(hawk)Powinno być tak:
1) Zawsze ur... 31.12.2004, 20:22:03
kurak Hmmm... no to mamy tu przypadek rozbieznosci zezna... 1.01.2005, 14:33:29 ![]() ![]() |
|
Aktualny czas: 29.12.2025 - 17:58 |