Hou je PHP code overzichtelijk: MVC
Posted at November 28, 2011
Zodra je meer met PHP begint te spelen wordt het handig om je code beter te kunnen ordenen en structureren. PHP kan namelijk een spaghetti taal zijn als je PHP in je HTML zet met ifjes en loopjes. Grote frameworks en CMS systemen hebben al eerder manieren gevonden om alles overzichtelijk te houden.
MVC MVC (Model-View-Controller) is een abstract design pattern die het mogelijk maakt om eenvoudig logica van presentatie te scheiden, met logica bedoel ik hier eigenlijk alles wat niks meer met het design van je website te maken heeft. Omdat MVC een abstract idee is staat het los van de implementatie, zelfs op dat niveau zijn er al veel verschillende ideeën over wat nou de beste manier is.
Even een klein metafoor om het principe duidelijk te maken:
Als je naar de supermarkt gaat heb je alleen te maken met een cassiere, tenminste zo lijkt het. Echter zijn er in de supermarkt nog twee andere belangrijke rollen: namelijk de manager die alles en iedereen bij elkaar houdt en de magazijnmedewerker die ervoor zorgt dat er altijd genoeg spullen in de winkel staan.
Zo werkt het ook bij een website die zich aan het MVC principe houdt: Je denkt dat je alleen met de voorkant (views) te maken hebt, echter is altijd nog de baas die bepaald welke views er nodig zijn en die zorgt dat alles in de winkel aanwezig is, ofwel dat alle gegevens die nodig zijn om de views op te bouwen worden geregeld door een model.
Hoe gaat dit in zijn werk?
Het is belangrijk dat alle rollen worden aangeroepen onder leiding van de controller. Deze zit of rechtstreeks in een index.php (bestand die vaak automagisch geladen wordt) of wordt hierin al eerste aangeroepen. De controller zorgt dat het model de benodigdheden uit de database haalt* en verzamelt deze data en geeft ze mee aan de view.
*het model heeft alle informatie van je applicatie minus de user interface, in het geval van websites zijn dit vaak functies en klasses om een database te query’en.
Dit is een extreem simpel voorbeeld, het wordt al moeilijker als de Controller eerst moet uitzoeken welke pagina er aangevraagd wordt (vaak op basis van GET informatie vermomd via je webserver) en op basis daarvan andere controllers moet raadplegen die meerdere models en views bij elkaar moeten schrapen.
Bij een MVC website is het dus altijd zo dat je op een centraal punt binnenkomt en vanuit daar de betreffende pagina opbouwt.
MVC is niet alleen in de webwereld een belangrijk principe, ook als je bijvoorbeeld apps wilt gaan maken moet je dit begrijpen. Binnenkort zal ik een een tutorial posten die een extreem minimaal voorbeeld in PHP demonstreert.