![]() |
![]() |
![]()
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: 12 Pomógł: 0 Dołączył: 27.04.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Na phppatterns jest schemacik prezentuajcy MVC 2 i do tego jest śliczny kodzik źródłowy.
Mam pytanko w sprawie modelu (ProductModel) z tego kodu: ... a raczej kilka pytań: 1) Dlaczego ten model nie odpowiada pojedynczemu produktowi (wierszowi w tabeli bazy dancyh)? 2) ... można go napisać tak, żeby odpowiadał, ale wtedy możemy się pożegnać z listProducts - czyli wysłaniem żądania o kilka wierszy.... Jak sobie z tym poradzić 3) Czy można napisać taki model (np. articleModel) - który miałby też tablicę modeli np. CommentModel - i dzięki temu jakoś mógły sobie podporządkowywać Komentarze do samego siebie, dodawać usuwać itd... np tak: [php:1:7db2f59b24]<?php Class Comment { var $data; var $dao; function Comment($dao) { $this->dao = $dao; // Standardowa pusta tablica na dane - czy to doby pomysł? $this->data[title] = ""; $this->data[body] = ""; } function GetById($id) { $this->dao->query("SELECT * FROM comments WHERE id=".$id); // i tu pojawia się kwestia : czy dać tu od razu, żeby uzupełnić całą pustą tablicę $data, czy też jakoś inaczej? - jakaś rada? } function cośtam?() { // i tu by sie przydało coś co wyciąga je po np. articleid } function ReturnComment() { // i teraz nie wiem czy dać // return $this->data; // czy też return $this->dao->GetRow(); // w zależności od rozwiązania, jak dam $this->data to mogę się pożegnać z późniejszym wykorzystaniem while($cośtam = $CommentModel->ReturnComment()) } } // i do tego klasa art Class ArticleModel { var $dao; var $data; var $comments; function ArticleModel() // tu wszystko po staremu { } // KWESTIA OPISANA PONIŻEJ: } ?>[/php:1:7db2f59b24] Jak zrobić, żeby dało się tak przypisać klasie ArticleModel przynależność kolejnych Komentarzy w bazie, żeby ArticleModel zarówno odpowiadał artukułowi co jest w bazie jak i komentarzom, im przypisanym? Wie ktoś może jak to rozwiązać? O widoki nie pytam, bo to już w miare mały problem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 00:49 |