Tak sobie od kilku dni czytam ksiazeczke na temat programowania obiektowego i chce zrozumiec wzorzec MVC. Sklecilem taki kod i chce zebyscie go zweryfikowali czy moje rozumowanie idzie w dobra strone.
Bez obslugi bledow, bez pojedynczych instancji, prosty kod zeby sie przekonac czy dobrze rozumuje itd. Narazie sie bawie...
Zerknijcie okiem i napiszcie cos od siebie. Dzieki z gory za wszelkie uwagi!
<?php
/**
* Interfejs kontrolera - kazdy niech ma metode ustawiania widoku
*/
interface Controller {
public function setView($viewName);
}
/**
* Interfejs widoku - kazdy niech ma metode wyswietlania
*/
interface View {
public function display();
}
/**
* Klasa widoku produktu z zaimplementowanym interfejsem widoku
*/
class ProductView implements View {
public function setVar($varName, $varValue = false){
$this->vars[$varName] = $varValue;
}
public function display(){
foreach($this->vars AS $varName => $varValue){
print "[{$varName}] => {$varValue}\n"; }
}
}
/**
* Klasa pojedynczego produktu
*/
class Product {
protected $title;
protected $price;
public function setTitle($title){
$this->title = $title;
}
public function setPrice($price){
$this->price = $price;
}
public function getTitle(){
return $this->title;
}
public function getPrice(){
return $this->price;
}
}
/**
* Klasa kontrolera produktow korzysta z klasy Product i implementuje interfejs k
ontrolera
* Wywolanie akcji addProduct powoduje ustawienie title, price, widoku ProductVie
w i wyswietlenie danych
*/
class ProductController extends Product implements Controller {
private $viewObj;
public function addProduct($title, $price){
$this->setTitle($title);
$this->setPrice($price);
$this->setView('ProductView');
$this->viewObj->setVar($this->getTitle(), $this->getPrice());
$this->execView();
}
public function setView($viewName){
$this->viewObj = new $viewName;
}
public function execView(){
$this->viewObj->display();
}
}
/**
* Tu powinien byc jakis front controller ktory wywola akurat kontroler produktow
ale do tego jeszcze nie doszedlem
*/
$o = new ProductController;
$o->addProduct('Nazwa 1', '44.99');
?>
Ten post edytował Helios 13.08.2007, 17:54:47