Hoezo? Wanneer je de verschillende verantwoordelijkheden goed gescheiden hebt dan maakt het anders indelen van de site nauwelijks uit. En mocht je daadwerkelijk overal aanpassingen nodig hebben dan zorgen de gescheiden delen ervoor dat je aanpassingen telkens een overzichtelijke scope houden. Hierdoor zijn de aanpassignen te overzien, beter testbaar en uiteindelijk is de kans op fouten kleiner.
En zo lever je dus dubbel werk. Op mijn site doe ik het iets anders, ik gebruik twee files met functies. File 1 met functies die de input verwerkt. File 2 die de uitvoer verzorgt. Beide bestanden worden door de uiteindelijke PHP pagina (index.php) aangeroepen om zo een werkend geheel te vormen.Wil ik de layout anders? Pas ik de index.php & layout_functies.php aan. Wil ik de techniek anders? Pas ik de index.php en de functies.php aan.
Maar eigenlijk heb je dan al een scheiding van presentatie en business logic, mits je het uit de database uitlezen in functies.php hebt staan. Het lijkt me dat dit in jou geval ook zo is, anders is je laatste opmerking gelogen. Het aanpassen van wat jij 'techniek' noemt zou immers ook een database wijziging in kunnen houden (en volgens jou was er geen aanpassing in layout_functions.php nodig).
Ik moet echter wel zeggen dat het mij nogal een onoverzichtelijk gebeuren lijkt wanneer je je complete site in 3 bestanden hebt zitten. Dat lijkt me behoorlijk heen en weer scrollen tijdens het ontwikkelen.
(Disclaimer alle functies geven een string variabele terug waarin de uitvoer staat. De uiteindelijke echo staat enkel in het index.php bestand)
Oh wacht. Als het hier om ALLE functies gaat dan zul jij voor een simpele database wijziging ALLE bestanden aan moeten passen.
[...]
Ook hier ben ik het radicaal niet mee eens. In OO behoort een object zijn eigen presentatie te verzorgen.
Onzin. Het is ten sterkste af te raden om een object alles zelf te laten doen. Dat zou immers betekenen dat een object zou moeten weten hoe hij exact in elke database opgeslagen zou moeten worden, hoe hij geserialiseerd zou moeten worden middels xml, json en binair, en hoe hij zichzelf op een console, in html en op een form weer zou moeten geven. Je zou dan wel van zulke enorme god objecten hebben.
Het hele doel van object georienteerd programmeren is juist om ervoor te zorgen dat de verantwoordelijkheid van een enkel object zo duidelijk mogelijk begrensd zijn.
Als je een object op een Form zet hoort dit object door het object getekend te worden op de canvas die het Form biedt. Het Form mag in geen geval gaan bepalen hoe het object getekend moet worden.
(Oké in PHP heb je zulke forms niet, maar ook in PHP kan je Object Oriented werken en dan gaat dit weer wel op)
Het form is daar inderdaad niet verantwoordelijk voor. Die is alleen verantwoordelijk voor het vragen hoeveel ruimte het getekende nodig heeft en vervolgens ook teruggeven hoeveel ruimte het krijgt en waar het getekend mag worden. Het is echter ook niet zo dat het object zelf bepaald hoe het gerenderd wordt. Wanneer jij een object 'gebruiker' hebt zou het wel erg onhandig worden wanneer daarin alle rendercode (voor kleine weergave als listitem, detailview, editscherm enz enz), persisteercode en wat voor code dan ook zit. Je zult eerder nog een object GebruikerPanel en/of GebruikerListItemRenderer (oid) hebben die die specifieke taken doet.