Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> prawidłowosc wzorca mvc
pdfpl
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 29.03.2011

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
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)
Go to the top of the page
+Quote Post

Posty w temacie


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: 8.10.2025 - 03:07