PHP expert |
|
Hoe meer je met MVC werkt, hoe meer je het gaat begrijpen. Ook al lees je er tientallen artikelen over, zonder praktijk ga je er geen vat op krijgen. Voorbeelden zijn inderdaad handig, maar dan heb je wel het nadeel dat je andere mensen hun programmeermethodes misschien gaat verwarren voor iets wat MVC zou kunnen zijn. Er bestaat ook geen vaste regel hoe MVC eruit moet zien, sommige elementen zwemmen ook tussen de controller en het model, en zelfs tussen de view. Sommigen zeggen dat de view de model niet mag aanraken en anderen denk hier anders over. Dit moet je natuurlijk voor jezelf bepalen hoe streng je gaat zijn.
Een gastenboek eenvoudig voorgesteld (om MVC te proberen te begrijpen) zou er zo uit zien (aub: let niet op de syntaxis, want het gaat niet om het begrijpen van de keywoorden maar om het begrijpen van het idee, ik gebruik ook geen namespaces in dit geval omdat dit enkel verwarring strooit en los staat van MVC):
Model:
<?php
class Gastenboek extends Model {
// ga er van uit dat Model functies bevat om op te slaan:
// save($arrayMetElementenVanTabel)
// ga er van uit dat Model functies bevat om te verwijderen:
// delete();
// ga er van uit dat Model functies bevat om toe te voegen
// ::add();
// ga er van uit dat Model functies bevat om op te roepen
// ::getAll();
// en nu goed het verschil zien tussen statische aanroep en instantieaanroep
protected $_table = "gastenboek";
}
?>
Controller:
<?php
class GastenboekController extends Controller {
$_uses = array('gastenboek'); // gebruikt model gastenboek
public function view() {
$items = Gastenboek::getAll();
$this->tpl->add('items', $items);
}
// ... etc
}
?>
View:
<?php
foreach($this->items as $item) {
echo $item;
}
?>
Model: <?php class Gastenboek extends Model { // ga er van uit dat Model functies bevat om op te slaan: // save($arrayMetElementenVanTabel) // ga er van uit dat Model functies bevat om te verwijderen: // delete(); // ga er van uit dat Model functies bevat om toe te voegen // ::add(); // ga er van uit dat Model functies bevat om op te roepen // ::getAll(); // en nu goed het verschil zien tussen statische aanroep en instantieaanroep protected $_table = "gastenboek"; } ?> Controller: <?php class GastenboekController extends Controller { $_uses = array('gastenboek'); // gebruikt model gastenboek public function view() { $items = Gastenboek::getAll(); $this->tpl->add('items', $items); } // ... etc } ?> View: <?php foreach($this->items as $item) { } ?>
Dit is natuurlijk pure basic, en je kan dit zo zot maken als je wilt. Lemon (en ik voor een deel, maar de grote eer gaat Lemon toe) hebben een modelsysteem ontworpen waarbij er zoveel uit wordt gehaald dat ik er zelf soms verbaasd van ben. Het nadeel is dat het iets te complex is. Maar eens je het begrijpt, gecombineerd met een heel eenvoudige view en controller... je hebt geen idee hoe snel je applicaties klaar zijn. Het grootste probleem is gewoon het opzetten van het framework, en dan vliegen je applicaties uit je vingers voor je het weet.
PS: eigenlijk best wel vies hoe, na maanden geen PHP te hebben geprogrameerd, enkele regels PHP me weer helemaal zot maken:s |