Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [MVC] Czy dobrze interpretuję ?, ciągle to mvc :(
matix
post
Post #21





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


@up: jesteś kolejną osoba, która myśli inaczej niz wszyscy. Co z tego wynika?
- to, że MVC polega tylko na tym, że te 3 rzeczy mają się ze sobą łączyć, w modelu mają być dane, w kontrolleru - 'mechanizmy' zarządzania a w widoku - prezentacja (np. szablony);
reszta, kto, jak wykona- jego inwencja i nie zmienia to faktu, że dalej trzymie się zasady MVC.

Czy nie mam racjii ?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #22





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Tak. Masz rację. Ja też to zauważyłem, dlatego postanowiłem parę postów wcześniej pokazać, że sama debata na temat MVC jest dziwną debatą, bo to tak jakbyśmy debatowali nad rolą władz; ustawodawczej, wykonawczej i sądowniczej. Tu role są jasne, a różnią się jedynie implementacjami: mamy dwu izbowy parlament, radę ministrów i sądy. W USA z kolei nie ma premiera itd. itp.

Pozdrawiam.
Go to the top of the page
+Quote Post
menic
post
Post #23





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Tyle ile programistow tyle opini nt MVC (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
MVC jest to tylko ogolna idea. Jak to zaimplementujesz to juz zalezy tylko od twojej inwencji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Tak w ogole to przydaloby sie jakis taki osobny temat wydzielic na to albo nawet i forum (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
matix
post
Post #24





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


Całe forum nie, ale może przynajmniej przykleić ten temat, bo wielu "młodych" webmasterów (w tym: ja) boryka się z tym właśnie problemem.

Pozdro (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
sf
post
Post #25





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Cysiaczek ładnie to rozpisał jakie są podejścia do MVC i wydaje mi się, że byłby to dobry materiał na artykuł.
Go to the top of the page
+Quote Post
menic
post
Post #26





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


@Cysiaczek: Wlascicie to czemu bloga nie prowadzisz (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #27





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Może nawet zacznę, ale dopiero jak się uporam z frameworkiem i napiszę w nim silnik (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
menic
post
Post #28





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


niedoczekanie (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
sf
post
Post #29





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


właśnie... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) mój się budował 2 lata, niby jest, ale ciągle jakieś poprawki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
href
post
Post #30





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2007

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


Przepraszam ze tak sie wcinam w inny temat, ale nie chcialem zakladac kolejnego tematu nt. mvc. Zdaje sobie sprawe ze mvc jest raczej 'poradą' w jaki sposob pisac aplikacje a juz od programisty zalezy w jaki sposob to sobie zaimpementuje, ale czy ponizszy kod mozna uznac za uproszczoną implementacje mvc? czy jesli powiem 'komuś' ze taka aplikacja jest napisana z wykorzystaniem wzorca mvc to nie wyglupie sie zbytnio? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

model:
  1. <?php
  2. class news
  3. {
  4. public function add()
  5. {
  6. // dodawanie newsow
  7. }
  8. public function show()
  9. {
  10. // wyswietlanie newsow
  11. }
  12. public function delete()
  13. {
  14. // usuwanie newsow..
  15. }
  16. // etc.
  17. }
  18. ?>


kontroler
  1. <?php
  2. function __autoload($file)
  3. {
  4. include_once($file.'.php');
  5. }
  6. $news = new news;
  7. switch($_GET['mode'])
  8. {
  9. case 'add':
  10. $news -> add();
  11. break;
  12. case 'show':
  13. $result = $news -> show();
  14. foreach($result as $value)
  15. {
  16. $template->assign_block_vars('news',array( // przekazanie wartosci zmiennych do widoku
  17. 'title' => $result['title'],
  18. 'message' => $result['message']
  19. //etc.
  20. )
  21. );
  22. }
  23. break;
  24. case 'delete':
  25. $news -> delete();
  26. break;
  27. }
  28. ?>


widok:
  1. <!-- BEGIN news -->
  2. <dl>
  3. <dt>{news.title}</dt>
  4. <dd>{news.message}</dd>
  5. </dl>
  6. <!-- END news -->


Ten post edytował href 23.07.2007, 09:39:54
Go to the top of the page
+Quote Post
kwiateusz
post
Post #31


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




tak takie coś można nazwać mvc wszystkie warstwy są od siebie oddzielone i nie mieszają się ze soba (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a podmiana któejś nie spowoduje zmian w innych warstwach.
Go to the top of the page
+Quote Post
miedzna
post
Post #32





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Model.php

  1. <?php
  2. class Model {
  3.  
  4. private $data;
  5.  
  6. function __construct() {
  7.  
  8. $this->data = false;
  9.  
  10. }
  11.  
  12. function calculate($name) {
  13.  
  14. $this->data[] = $name;
  15.  
  16. $len = strlen($name);
  17.  
  18. if ($len == 3) 
  19. $this->data[] = 'krótkie fajne imię';
  20. else
  21. if (($len > 3) && ($len < 6))
  22. $this->data[] = '... bez znaczenia';
  23. else
  24. $this->data[] = 'fantazja rodziców';
  25. }
  26.  
  27. function getData() {
  28.  
  29. if ($this->data) 
  30. return $this->data;
  31. else
  32. return 'Coś jest nie tak!';
  33.  
  34. }
  35.  
  36. } // class Model
  37. ?>




View.php

  1. <?php
  2. class View {
  3.  
  4. static function displayDefault() {
  5.  
  6. echo "<form method='POST' action=''>";
  7. echo "<p>Wprowadź imię: ";
  8. echo "<input type='text' name='name' value=''> ";
  9. echo "<input type='submit' name='send' value='Wyślij'>";
  10. echo "</form>";
  11.  
  12. }
  13.  
  14. static function displayError($error) {
  15.  
  16. echo "<p><b>Błąd:</b> {$error}";
  17. View::displayDefault();
  18. }
  19.  
  20. static function displayResults($results) {
  21.  
  22. echo "<p><b>Wyniki:</b>";
  23. echo "<p>Imię <b>".$results[0].
  24. "</b> oznacza <i>".$results[1]."</i>";
  25. echo "<p><a href='".$_SERVER['REQUEST_URI'].
  26. "'>dowiedz się więcej na temat swojego imienia</a>";
  27. }
  28.  
  29. } // class View
  30. ?>



Controller.php

  1. <?php
  2. class Controller {
  3.  
  4. private $error;
  5. private $result;
  6.  
  7. function __construct() {
  8.  
  9. $this->error = false;
  10. $this->result = false;
  11.  
  12. }
  13.  
  14. function processData() {
  15.  
  16. $this->userRequest();
  17.  
  18. if ($this->error)
  19. View::displayError($this->error);
  20. else
  21. if ($this->result)
  22. View::displayResults($this->result);
  23. else
  24. View::displayDefault();
  25. }
  26.  
  27. function userRequest() {
  28.  
  29. // DANE ZOSTAŁY WYSŁANE
  30. if (isset($_POST['send'])) {
  31.  
  32. $this->validate();
  33.  
  34. if (!$this->error) {
  35.  
  36. // PODSTAWOWE OBLICZENIA
  37. $model = new Model();
  38. $model->calculate($_POST['name']);
  39. $result = $model->getData();
  40.  
  41. // SPRAWDZANIE BŁĘDÓW W SAMYM MODELU
  42. if (!is_array($result))
  43. $this->error = $result;
  44.  
  45. else
  46. $this->result = $result;
  47.  
  48. }
  49. }
  50. }
  51.  
  52. function validate() {
  53.  
  54. if (empty($_POST['name']))
  55. $this->error = 'Wprowadź imię!';
  56. else
  57. if (strlen(strval($_POST['name'])) < 3)
  58. $this->error = 'Imię jest za krótkie!';
  59.  
  60. }
  61.  
  62. } // class Controller
  63. ?>




wykorzystanie, czyli jakiś tam index.php:

  1. <?php
  2. include("Controller.php");
  3. include("Model.php");
  4. include("View.php");
  5.  
  6. $controller = new Controller();
  7.  
  8. $controller->processData();
  9. ?>
Go to the top of the page
+Quote Post
sanchoo
post
Post #33





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


mam pytanie o moja interpretacje... tzn o krytyke (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) bo pisze chyba juz 10 raz.. i zmieniam zmieniam i zmineiam.. a czasu nie mam za duzo:)
u mnie to dziala tak:
najogolniej mam ?dzial=1
Pobieram z bazy nazwe takiego dzialu i odpalam taki contlroler (jest dziedziczony z glonwego).
Przyklad spr. czy zalogowany admin/user.
Logowanie odbywa sie u mnie tak:
Contlorer sprawdza czy podalem dobry login i haslo oraz jakie mam prawa user/admin. i odpala mi taki podcontroler class admin (np.) .. ktory aktualizuje w bazie ("ostatnio zalogowany" itp..) jesli zalogowalem sie jako admin odpalam clase admin_view np:) ktora pobiera sobie info z modelu..co ma wyswielic po czym odpala assign i laduje do smartow..wyswietla:)


Mam pytania:
Potrzebuje dane z modelu jakos obrobic... posprawdzac itp... mam to zrobic na poziomie contlorera i wyslac do widoku?? czy tym sie ma zajac widok ..i ewentualnie skorzystac z funkcji kontolrera? np usuwanie posta z info czy "post zostal usuniety poprawnie" (taki przyklad) wybieram usun.. klikam ok strona sie przladowuje odpalany jest kontlorer ze sprecyzowna akcja ... ktora odwoluje sie do modelu i usuwa, jesli usunie zwraca true i teraz mam zrobic cos takiego np $usunieto=true (jesli usuneolo poprawnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) new admin_view($usunieto);
Go to the top of the page
+Quote Post
WebCM
post
Post #34





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Ostatnio zaglądnąłem do części kodu PhpBB 3. Nasuwa mi się trochę inne rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Kontroler dołącza klasę modelu i tworzy obiekt. Stąd też pobiera tytuł strony i inne dane, a także pliku widoku (szablon?). Jest jednak kilka kwestii:
- do wyświetlenia błędu lub informacji też dołączamy widok (np. gdy mamy zdefiniowaną funkcję Info)?
- co wtedy, gdy korzystamy z 2 modelów (np. news, komentarze)?

Aktualnie mam kilka kontrolerów (admin, index, głosowanie, pobierz plik, wyświetl link, generuj kod z obrazka, AJAX), a modele dołączają się już w <body> (warstwy nie są obiektami, ale to nie ma znaczenia). (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował WebCM 15.08.2007, 18:58:10
Go to the top of the page
+Quote Post
macbirdie
post
Post #35





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 7.09.2006
Skąd: Poznań

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


Skoro wszyscy przedstawiają swoje interpretacje, i ja dołączę, bo mam pewne wątpliwości.
Zend Framework 1.0.1.
Jest sobie np. stronka główna.
Jak wiadomo stronka główna zawierać może kilka dynamicznie generowanych elementów, jak lista ostatnich newsów, wpisów na forum, liczniczki, inne.
Są też inne strony, które mogą zawierać różne zestawy innych elementów strony, w różny sposób wyświetlanych i mogą różnić się diametralnie od strony głównej.

Jest więc kontroler strony głównej i innych.
Myślałem długo, jak do tego podejść, ponieważ niby kontroler ma przypisany jeden widok, a jeden widok ma mieć przypisany jeden kontroler. Tylko jak tu ładnie i wygodnie tworzyć kolejne składające się z różnych dynamicznych elementów stronki, by nie dotykać za bardzo kodu?
Wymyśliłem zatem tak, że do każdego kontrolera jest przypisany pliczek konfiguracyjny. Ten zawiera informacje na temat elementów, jakie mają się w danej akcji pojawić, jakie dostają parametry i jakie szablony mają używać, by się wyświetlić.
Np. kontroler index ma akcję index, więc jest views/controllers/index/index.xml
Tam jest np.
nagłówek, szablon naglowek_normalny.phtml, tytuł: tytuł sajtu + tytuł aktualnej strony, aktualna data i parę innych pierdółek.
lista newsów, szablon newsy_główna.phtml, ile newsów: 10, kategoria: główna
lista postów forum, szablon: posty_forum_główna.phtml, ile postów: 15
itd.

Do każdego takiego elementu dynamicznego przypisana jest klasa, która zajmuje się pożywieniem elementu danymi z modelu/modeli, zatem można powiedzieć że to taki mały kontroler.

Moja klasa rozszerzająca Zend_Controller_Action (MacBirdie_Controller_PresentationAction, a co (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif) ) działa tak że w init pobiera konfigurację dla kontroler/akcja, akcja kontrolera domyślnie nic nie robi, dopiero w post-dispatch pobierana jest informacja na temat elementów i zostają kolejno odpalane klasy tych elementów, te każdemu szablonowi Zend_View (na razie spróbuję standardowe phtml) wrzucają potrzebne dane, następnie widoczki są renderowane i dopisywane do response.

Czy to jest czy nie jest herezja MVCowa? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Na takiej zasadzie od dawien dawna działa sajt stworzony przeze mnie daaawno temu, PDAclub.pl i jest to metoda bardzo wygodna, jednakże tam MVC nie stosowałem, więc nie wiem czy jakichś zasad nie naruszam.
Jeśli tak, jakie są inne podejścia do tego problemu?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.11.2025 - 15:59