Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [mvc]poraz kolejny..., Pytanie o teorie
MadHatter
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 15.02.2007

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


Witam,

Mam pytanie czysto teoretyczne. Buduje strone i chce ja oprzec na wzorcu MVC. Wspieram sie Smarty i Pear przy tym. I teraz moje pytania.
1. Czy za widok maja byc odpowiedzialne tylko szblony smarty czy tworzyc do niego osobna klase?
2. Poza przypisaniem danych ktore uzyskuje z modelu, podstrony roznia sie tez wygladem(dokladnie tlami glownej tresci), jaka czesc MVC powinna byc odpowiedzialna za ustwienie przykladowego tla? Rozwazam dwa przypadki, nie wiem jednak ktory bylby "najczystrzy" jesli chodzi o zalozenia ww wzorca. Pierwszy to to ze poszczegolne metody kontrolera przypisauja do szablonu smarty, dane z modelu oraz w kazdje metodzie jest deklarowana zmienna odpowiadajaca za tlo strony i tak tez przypisywana do szablonow. Drugie rozwiazanie to takie, ze w akcjach kontrolera wogole nie zajmu je sie ustawianiem tla a tylko wyborem widokow. W takim przypadku jednak ilosc szablonow musialbym odpowiednio rozmnozyc.

Czytam dosc spro na temat mvc, moje doswiadczenie z frameworkiem cakePHP wcale nie rozwialo wszelkich watpliwosci jednak, przynajmniej tych teoretycznych. Rozumiem ze wzorzec jest raczej czyms abstrakcyjnym i elastycznym niemniej na forum znalazlem taka definicje widoku:

Cytat
Główna zasasda MVC jest to aby w modelu byl tylko kod php a w VIEW tylko html


Natomiast w jednym z rtykulow na wortalu opis brzmi juz tak:

Cytat
Widok powinien wykorzystywać model do pobrania danych, które będą wyświetlone. Typowo, widok powinien utworzyć instancje klas modelu i wywołać metody odpowiedzialne za pobranie odpowiednich danych. Tym, czego należy się wystrzegać w widoku, jest modyfikacja danych. Widok nie powinien zmieniać w żaden sposób stanu aplikacji. Powinien np. wyświetlać listę użytkowników, ale nie powinien ich dodawać ani usuwać.


Rozbieznosc jest wiec dosc spora...

Jak najlepiej wedug Was zarac sie za to, w przypadku niewielkiej aplikacji?

Z gory dzieki i pozdrawiam!
Go to the top of the page
+Quote Post
menic
post
Post #2





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

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


ech....
Ile razy to jeszcze będzie wałkowane?
Jest tyle pomysłów na to ilu jest programistów. Najlepiej to zacznij sam powoli pisac, próbuj rozne sposoby i wybierz ten, który ci bardziej do gustu przypadnie.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #3





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




http://forum.php.pl/index.php?showtopic=69281&hl=widok
W podanym wyżej topiku masz sporo teorii z przykładami. Gdzieś w połowie strony napisałem kilka zdań na temat różnych interpretacji elemantów składowych wzorca.

Pozdrawiam.
Go to the top of the page
+Quote Post
MadHatter
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 15.02.2007

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


Bardzo dziekuje, tego watku nie wygrzebalem, coz widze tylko ze problem ma mase rozwiazan, ale przynajmniej wiem ze nie robie jakiegos karygodnego myslowego bledu chyba... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Jeszcze raz dzieki i pozdrawiam!
Go to the top of the page
+Quote Post
sanchoo
post
Post #5





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

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


no to ja ma pytanie ... z klasy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. <?phpclass A
  2. {
  3. }
  4. class B extends A
  5. {
  6. private zmienna;
  7. private $strona;
  8. public function getZmiana()
  9. {
  10. return $this->zmienna;
  11. }
  12. public function getStrona()
  13. {
  14. return $this->strona;
  15. }
  16. $this->strona=new C;
  17. }
  18. class C{$stronaC= $contlore->getStrona()->getZmiana(); // jak mam odwolac sie do elementu zmiennaw clasie B (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)  bo to nie dziala :)}
  19.  
  20. $contlorer = new B;?>


Ps: gdyby ktos zajrzal do przedszkola byl bym wdzieczny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) http://forum.php.pl/index.php?showtopic=74579&hl=

Ten post edytował sanchoo 13.08.2007, 12:17:17
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





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




Przyjrzyj się definicji swojej klasy C, wogóle napisz jeszcze raz ten kod, tym razem poprawnie, bo wogóle to nie ma prawa działać.

Pozdrawiam.
Go to the top of the page
+Quote Post
sanchoo
post
Post #7





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

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


faktycznie zle napsialem.. napsialem to z palca zeby tylko przedtsawic problem:

  1. <?php
  2. klasa A{
  3.  
  4. private $strona;
  5. getStrona() //pubiera strona
  6.  
  7. $this->strona = new B; //w konstruktorze
  8.  
  9.  
  10. }
  11.  
  12. classB
  13. {
  14.  
  15. private $zawartosc;
  16. getZawartosc() pobiera zawartosc;
  17. $this->zawartosc="KOT"; //w konstruktorze
  18.  
  19. }
  20.  
  21. clasa View{
  22. global contlorer;
  23.  
  24. $contlorer->getStrona()->getZawartosc(); // tak nie pobiera mi :( a zalezy mi aby pola byly private; //w konstruktorze
  25.  
  26.  
  27. }
  28.  
  29. $contlorer = new A;
  30. new View;
  31. ?>


Ten post edytował sanchoo 13.08.2007, 13:04:19
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #8





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@sanchoo
Ty może już nie pisz, albo najpierw sprawdź czy to co podałeś działa.
Do tego użycie globali to debilizmy, gdy się bez nich spokojnie da obejść.
Go to the top of the page
+Quote Post
sanchoo
post
Post #9





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

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


hehe tak jak mowilem chodzilo o kokreny przyklad (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ogolnie.. klasa wywoluje klase nie mozliwe?? i inna klasa chce pobrac dane z klasy ktora wywola klasa... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .. co tu ma dzialac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
  1. <?php
  2. $this->zawartosc="KOT"; //w konstruktorze
  3. ?>

ale to chyba nie trzba wyjasniac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
no nie wazne... widze ze jak sie nie poda zerznietego kodu ktory sie "kompiluje" to ciezko zczaic o co komus chodzi... moze to i racja ... wsumie jak ktos napisze "pseudo kod" ktoremu wydaje sie jasny to nei koniecznie ktos moze zrozumiec o co chodzi... w kazdym razie poakzalm znajoemu z pracy... i jakos bez 2 zdan powiedzial mi co mam zrobic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ale dzieki za zainteresowanie....
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #10





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@sanchoo
Co ma działać, to że to co piszesz jest nie zgodne z żadnymi zasadami, po co dajesz komentarze, kiedy kod sam by to powiedział, a nie trzeba dodatkowo się nad tym wysilać, bo Tobie się nie chce pisać. Va nawet nie opisałeś słowami tego, tylko narzekasz i sugerujesz że osoby z tego grona są głupsze od Twojego kolegi z pracy.
A zrozum że po prostu nie chce się ludziom wnikać w czyjeś wywody, gdy są niejasne, wtedy chodzi nadinterpretacja i mozna zrozumieć że działa inaczej niż Ty myślałeś że to prezentujesz. Więc radził bym nauczyć się opisywać swoje problemy, czy pomysły w taki sposób aby dla innych były łatwo przyswajalne, bo nie chodzi tu o to aby utrudnić innym zrozumienie. A Twój "pseudokod" taki jest.
Go to the top of the page
+Quote Post
sanchoo
post
Post #11





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

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


Cytat
to ciezko zczaic o co komus chodzi... moze to i racja ... wsumie jak ktos napisze "pseudo kod" ktoremu wydaje sie jasny to nei koniecznie ktos moze zrozumiec o co chodzi...

jesli wyszlo tak jak mowisze ze zasugerowalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) to przepraszam.. zadaje sobie sprawe ze inaczej jest zapytac kogos na zywo.. a inaczej przez forum gdzie pytanie musi byc bardzo dokladnie sprecyzowane.
Go to the top of the page
+Quote Post
sanchoo
post
Post #12





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

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


MVC a walidajca formularzy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Chce zamknac walidacje w jednej klasie. Wydumalem to tak:
w pliku index.php:
  1. <?php
  2. include('class_control.php');
  3.  
  4. if(($walid = new walid())==true)
  5. {
  6.  
  7. $name = model::name_dzial($_GET['dzial']);
  8.  
  9. $control = new $name($name, $_GET['id'], $walid); //przekazuje obiket do kontolrera (kontolere jest dziedziczony do klasy podstawowej contolrera.
  10. }else echo "error";
  11. ?>

i clasa walid:

  1. <?php
  2. class walid
  3.  {
  4.  private $error=array();
  5.  
  6.  public function __construct() 
  7.  {
  8.  $this->error['dzial']=$this->id_dzial($_GET['dzial']); na samym poczatku przekazuje dzial w zaleznosci od dzialu bedzie rozna ilosc zm
    iennych... np bedzie trzbea dodasc shaslhe albo zabepzieczyc przed SQL Injection. Dlate tu spr. tylko dzial (czy to numer czy w bazie istenije)
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  if(in_array(false, $this->error))
  16.  {
  17.  $name = model::name_dzial($this->error['dzial']);
  18.  $control = new $name($name, 0);
  19.  exit();
  20.  }
  21.  return true; //to jest chyba nie potrzebne kod zatrzyma sie wyzej wywalajac odpowiedni widok ER
    ROR strona nie istnieje czy cos.
  22.  
  23.  }
  24. ?>



obiket walid loaduje w korzeniu kontolrera:
  1. <?php
  2. public $walid;
  3. public function __construct($dzial, $id, $walid)
  4.  {
  5.  $this->model= new model;
  6.  $this->walid=$walid;
  7. ?>


i teraz moge sobie wywolywac w contolrolerze np jesli chce zabezpieczyc sie przed SQL Injection to w klasie walidacji stworze sobie odpowiednia funkcje .. ktora zwroci mi juz sprawdzona wartosc do zapytania.

Pytanie czy to dobre rozwiazanie?? dzieki temu co prawadam unikam np global $walid itp... ale mvc zaczyna bardziej mi sie wiazac... walidacje trez bede stosowal w widoku wiec bede musial przekazac mu obiket (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
menic
post
Post #13





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

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


Może TO ci pomoze. Na koncu jest przykład jak u siebie rozwiązałem problem validacji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Speedy
post
Post #14





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Cytat
Główna zasasda MVC jest to aby w modelu byl tylko kod php a w VIEW tylko html


Nie tylko HTML. Widok odpowiada za wyświetlanie i prezentację danych w każdej postaci - tj. XHTML, XML, RSS, PDF, XLS, CSV itd.
Nie odbywa się w nim pobieranie danych, ani też ich modyfikacja. Dane są wyłącznie prezentowane. Wg mnie, dla każdego typu prezentowanych danych powinien być utworzony osobny "subwidok".
Go to the top of the page
+Quote Post
sanchoo
post
Post #15





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

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


Cytat(Speedy @ 27.08.2007, 00:43:20 ) *
Nie odbywa się w nim pobieranie danych,
hmm.. widok w mvc ma dostep do modelu po co innego jak nie pobieranie danych? Jesli nie moze pobierac danych wtedy zostaje tylko opcja ze kontroler podaje mu dane.. a to juz nie jest MVC tylko ...wylecialo mi z glowy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wzorzec gdzie kontlorer jest lacznikiem widoku i modelu. Oczyiwscie widok nie ma mozlwisci edycji danych!!Dodam z u mnie widok odpowiada za pobranie danych... i wrzucenie ich do smartow:)
Go to the top of the page
+Quote Post
menic
post
Post #16





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

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


@up: no czekam jaki to to jest wzorzec (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Bo banialuki piszesz...
Go to the top of the page
+Quote Post
sanchoo
post
Post #17





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

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


menic dzieki za info.
Zrobilem to mniej weicej tak: Model dziedziczy z klasy walid. I tam sobie odpoweidnio sprawdzam dane. Jesli jest jakis blad powiedzmy nick za krotki to zapisuje to tak. $this->error['nick']="Nick jest za krotki" Dzieki czemu pozniej laduje do smartow wyswietl przy nicku $model->getError("nick")... i po sprawie..
Podbnie jest rozwiazane w Ruby.
Niestey xml nie maielm zadnej stycznosci... raczej z jego zastoswaniem.. nie ta liga jeszcze (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #18





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




Chcesz powiedzieć, że zrobiłeś Model extends Validator ?
No bez jaj...
Go to the top of the page
+Quote Post
sanchoo
post
Post #19





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

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


chcialem waldiacje zamnac w jedenj klasie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ... tak mi polecil znajomy ktory siedzi kupe lat... zadalem kilka pytac wyzej jak uzywacie walidacje w mvc to tylko "menic" cos napisal.. a teraz psizesz "bez jaj" .. napisz jak ty to robisz bede wdzieczny... jak widac w temacie "pierwsze kroki"

  1. "Modelem nazywamy tą część kodu aplikacji, która jest odpowiedzialna za kontakt z danymi biznesowymi, gdziekolwiek są składowane
  2. (zwykle w relacyjnej bazie danych). Model nie tylko służy do pobierania i modyfikacji danych biznesowych, ale także zajmuje się ich spójnością i
  3. integralnością poprzez odpowiednie mechanizmy walidacji danych." na:
http://blog.zabiello.com/articles/2007/01/...mplates-and-mvcno mogl bym tam osbne funkcje zaladowac do walidacji... ale wydawalo mi sie bardziej estetycznie jesli walidacja bedzie w osobnym pliku jako klasa... dlaczego to jest zle roziazanie?

Ten post edytował sanchoo 27.08.2007, 14:43:38
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #20





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




Nie chodzi mi o to, że umieszczenie walidacji w modelu jest złe, a jedynie o sam fakt zaistnienia tutaj relacji dziedziczenia. Tu jedyną relacją jaka jest prawdiłowa, to zawieranie, czyli wg, podręcznika php - agregacja - Obiekt Modelu zawiera obiekt Validator.

Pozdrawiam.
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: 5.10.2025 - 07:21