PHP expert |
|
OK, wat voor functies in een CMS komen is niet zo belangrijk. Het belangrijkste is dat het uitbreidbaar is. Bij dit uitbreiden moet je zorgen dat de programmeur die een nieuwe functionaliteit toevoegt (bijv. scripts, forum, of nieuws), geen code hoeft te schrijven die er eigenlijk al is.
Een voorbeeld:
Jij maakt een CMS, en daarin zitten de volgende functies:
- Forum
- Categoriën
- Toevoegen
- Reacties verwijderen
- Topics starten
- Reacties toevoegen
- Reacties bewerken
- Links
- Toevoegen
- Bewerken
- Verwijderen
- Reacties
- Toevoegen
- Bewerken
- Verwijderen
- Forum - Categoriën - Toevoegen - Reacties verwijderen - Topics starten - Reacties toevoegen - Reacties bewerken - Links - Toevoegen - Bewerken - Verwijderen - Reacties - Toevoegen - Bewerken - Verwijderen
Nu komt er een andere programmeur, en die wil er een nieuwe functionaliteit aan toevoegen: Downloads:
- Downloads
- Toevoegen
- Bewerken
- Verwijderen
- Reacties
- Toevoegen
- Bewerken
- Verwijderen
- Downloads - Toevoegen - Bewerken - Verwijderen - Reacties - Toevoegen - Bewerken - Verwijderen
Hier zie je dat dit bijna hetzelfde is als links. Dus het zou voor deze programmeur mogelijk moeten zijn om bij. het over te nemen van links. Dus niet code copy-pasten, maar via een andere weg. Want als je code gaat kopieeren, en je ziet later dat er een bug in zit, bijv. dat leden die geen rechten hebben om reacties van anderen te verwijderen dat toch kunnen doen door dat in de url te schrijven (reactie.php?ID=324&actie=verwijder) dan moet je die in alle systemen eruit gaan halen. Als je het zo maakt dat de programmeur deze code kan gebruiken zonder hem te kopieeren dan hoef je dat maar 1 keer te doen.
Ik raad je aan te werken volgens het Model-View-Controller principe. Dat zegt dat je de volgende code uit elkaar moet houden:
Model: code die data uit een database, of uit een file haalt
View: code die de data uit het Model verwerkt naar output, bijv. HTML
Controller: code die de acties die de gebruiker wil doen uitvoert, bijv. een reactie posten of verwijderen.
Als je dit doet blijft je CMS zo universeel mogelijk. Als jij het gemaakt hebt voor een mysql-database, maar iemand anders wil de data liever uit een XML-bestand halen hoeft hij alleen de Model-code te veranderen.
En als iemand zijn website een andere layout wil geven dan verandert hij de View-code.
Dit werkt op de volgende manier:
De controller verwerkt de input ($_GET, $_POST, etc), en laadt het Model & View. Daarna koppelt de controller Model aan View, en stuurt een seintje naar View, zodat de output gemaakt wordt. Als View tijdens het maken van de output data nodig heeft wordt dat aan Model gevraagd.
Dus zo:
Controller -> Model
Controller -> View
View -> Model
Dus Model is passief, en doet niets als dat niet gevraagd wordt. Je zou ieder gedeelte (model/view/controller) in een class kunnen stoppen, maar het kan ook als je met functies werkt.
Het moet in ieder geval los van elkaar kunnen runnen. Dus je moet in View bijv. een andere template-engine kunnen gaan gebruiken zonder dat je daarvoor de model-code, of controller-code hoeft te veranderen.
Met informatie vind je op http://www.phppatterns.com : een goede site die helaas (bij mij) vaak niet werkt. |