![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 29.03.2011 Ostrzeżenie: (10%) ![]() ![]() |
oto skrypt wyswietlajacy tabele mysql
zo zrobic aby byl on prowidlowy pod wzgledm wzorca mvc? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl"> <?php class Model {//obsluguje polaczenie private $zm_polaczenie; private $db; public function __construct($zm_polaczenie, $db) //konstruktor { $this->zm_polaczenie = $zm_polaczenie; $this->db = $db; $this->polacz(); } private function polacz() //funkcja polacz { if ($zm_polaczenie == null){ $zm_polaczenie = @mysql_connect('xxx', 'xxx', 'xxx');//server user passwd $db = @mysql_select_db('xxx', $zm_polaczenie);//database } return $zm_polaczenie; } } class Widok {//wyswietla dane, moze byc wiele widokow private $row; private $result; public function __construct($row, $result) //konstruktor { $this->row = $row; $this->result = $result; $this->uruchomPolaczenie(); $this->pokaz(); } private function uruchomPolaczenie()//konstruktora z klasy Model { $this->Model = new Model(); } private function pokaz() //funkcja pokaz { $result = mysql_query('SELECT * FROM program ORDER BY data'); echo "<table border='1'>"; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<tr>"; echo "<td>".$row['data']."</td>"; echo "<td>".$row['punkt_programu']."</td>"; echo "<td>".$row['dokument']."</td>"; echo "</tr>"; } echo "</table>"; } } class Kontroler {//sprawdza dane z geta i decyduje co uruchomic private $co; public function __construct() //konstruktor { $this->co = $co; $this->co_uruchomic(); } private function co_uruchomic() //kontroler { $co=$_GET["co"]; if ($co==""){ echo "NIE wybrano widoku.<br><br>"; echo "DOSTĘPNE WIDOKI:.<br>"; echo "* <a href='mvc2.php?co=widok1'>Widok 1</a>"; } if ($co=="widok1"){ new Widok();//konstruktor klasy Widok } } } new Kontroler();//uruchamia wzorzec mvc ?> Ten post edytował pdfpl 16.01.2012, 14:57:41 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Po pierwsze zacząłbym od tego, że poczytałbym o różnicy między Kontrolerem i Routerem. Dla Ciebie to jednoznaczne.
Kontroler: Dla Ciebie albo jest to widok1 albo brak. A co jeśli widoków będzie 100? Zrobisz switcha ze 100 case'ów? Model: ograniczyłeś do jednego, na sztywno wpisanego do modelu. A co jeśli zmienią sie dane? Grzebać będziesz w pliku tym i szukać gdzie robisz połaczenie? A co jesli ktoś nie ma Mysql tylko Pgsql lub Mssql czy Firebirda? Wszystkie funkcje mysql_* możesz właśnie wyrzucić na śmietnik. Widok: Konstruktor mnie zdziwił... Pobierasz konstruktorem dane, ale jdnoczesnie otem tworzysz połączenie do bazy... Dziwna kolejność. Prześledź sobie co się dzieje: Walisz od razu kawał kodu w HTML, potem napotykamy Kontroler->__construct() Wewnątrz konstruktora $this->co uruchomic() To może wywołać new Widok->__construktor() BEZ PARAMETRÓW na co się wkurzy interpreter i sypnie że jak to tak? Bo brak wartości domyślnych, ale bądźmy dobrzy i pozwólny by dał sobie NULLe... Wywołujemy Widok>uruchomPolaczenie() co wykopie nam Model() i jego konstruktor. Ten przy Model->połacz, sprawdzi czy takie połaczenie istnieje, i jesli nie to utworzy je, a jeśli tak to zwróci jego identyfikator. Pytanie o sens tego drugiego jest tylko gdy robisz to kilkukrotnie w obrębie skryptu jednego (czas życia) - stworzyleś niezbyt lubiany singleton (IMG:style_emoticons/default/wink.gif) Teraz dalej Widok->pokaż() i plujesz na domyślnym połaczeniu html.. A skąd ja niby wiem jakie połaczenie użyć? A co jeśli jest kilka jednocześnie? Widok sobie zgaduje którego użyć? (IMG:style_emoticons/default/wink.gif) Yak czy inaczej plujesz niepoprawnym HTMLem do przegladarki bo brak Ci sekcji head i body. Naprawdę nie widzisz tu problemu? To nie ma zbytnio rąk i nóg. Jest strasznie ograniczające. A teraz przypuśćmy zamiast pliku HTML chcesz wypluć te dane jako XML... Cały kontroler, widok i model piszesz od nowa? Nawet jeśli podane tematy czytałeś, to kompletnie nie rozumiesz idei i robisz ją "po swojemu", chcac przykładu, który by był jakiś rozsądny, choć troszkę elastyczny, wymaga napisania conajmniej kilkunastu, w tym część abstrakcyjnych. I chcesz by Ci to teraz dać na tacy. Bo to co dałeś z MVC nie ma wiele wspólnego poza podziałem (i to jeszcze niezbyt poprawnym) na 3 warstwy. Ja bym własciwie pytanie "Co jest źle?" zamienił "Co jest dobrze?" bo przynajmniej mniej pisania by było (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 03:07 |