Waarschuwing: Lang, moeilijk verhaal
Ik zal als eerste even de situatie schetsen, dan weten jullie een beetje de achtergrond en de insteek van mijn verhaal cq topic
Ik mag graag digitale zaken bouwen. Het begon met mijn 'computerbedrijfje'. Ik wilde mijn klanten en werkzaamheden bijhouden om zo gestructureerd en professioneel te kunnen werken. Dit begon met het bouwen van een database in Access, maar omdat het van scratch opbouwen nog veel werk was in mijn beginjaren (geen IT-opleiding, alles zelf aangeleerd door uitproberen en een heleboel lurken op tweakers) heb ik de Northwind database gepakt en die een beetje getweaked.
Code van scratch opbouwen gaat niet zo snel, maar bestaande code lezen, begrijpen en ombouwen naar mijn wensen kan ik wel vrij snel. Die approach gebruik ik tot op de dag toe vandaag ook nog.
Ik zal nog even doorgaan op mijn inleiding. Die Northwind database werkte prima, behalve één ding: ik kon onderweg geen gegevens invoeren en/of er bij pakken. Dus: een webapp. Ook dat heb ik eerst van scratch geprobeerd, wat op zich redelijk lukte, maar codetechnisch zit het vast en zeker niet zo goed in elkaar.
Dus heb ik de voorbeelden van XAMPP (de muziek-collectiedatabase) gebruikt en omgebouwd naar mijn wensen, en zodoende geleerd hoe ik met SQLite en PDO om kon gaan, en ik kon gegevens lezen wen wegschrijven naar de database. Een vleugje AJAX en wat Responsive webdesign, en ik had een leuke web-app die goed werkte onderweg.
Afijn, aangezien ik blijf leren (in elke tutorial lees je wel eens wat moeilijke termen, en als ik die nazoek dan kom ik opeens in een heel ander niveau van PHP) kom ik ook steeds stapjes hoger.
Mijn volgende web-app was een soort mini-CMS, die werd al iets moeilijker door het inlezen van bestaande CMS-data en vervolgens uit te lezen en te manipuleren in mijn webapp, maar ook dat werkte.
Op een gegeven moment zag ik het woordje 'Bootstrap' en toen ik dat nazocht ging er weer een nieuwe wereld voor mij open. Tevens werden mijn website design-technisch ook opeens 100x zo mooi
Dus, nieuw projectje bedacht, weer van scratch begonnen (want ik wil mezelf elke keer overtreffen) en CMS 2.0 gemaakt. Zelfde functies als mijn eerste mini-CMS, maar PHP-technisch sterker. Ik las in een turoial over PHP functions en wéér ging er een wereld open, sterker nog, mijn code werd opeens ook overzichtelijker, haha. Waar ik alleen nog niet zo zeker over was is het volgende:
Alle 'actie-linkjes' (dus toevoegen van user, verwijderen van user, editen van user-data) POSTen hun data naar de respectievelijke 'actie-pagina's'. Dus, in mijn tabel met users staat achter elke user een potloodje en een prullenbakje, die linken naar /edit.php?type=user&id=1 of /delete.php?type=user&id=1.
De edit.php werd op een gegeven moment langer en langer, want naast users had ik ook contacts, adresses, enzovoort. Dus kreeg ik:
Voor mijn gevoel kon het nooit de bedoeling zijn dat ik straks eindig met ontzettend lange edit.php's vanwege alle if/else voor alle mogelijke uitkomsten, dus zocht ik verder.
Zo kwam ik na het lezen van veel tutorials en mijn favo-site StackOverflow een term tegen en zodoende weer in een hoger niveau terecht: OOP met z'n classes.
Man man man, dat was pas wat... in plaats van 4 dezelfde queries kon ik gewoon:
doen. Dat scheelde pas een boel werk!
Dus, CMS 2.0 is gebouwd met een aantal classes en functies. Werkt al een heel stuk makkelijker en beter. Mijn login-systeem is op basis van PHPLogin en met behulp van die class heb ik ook mijn andere classes geschreven (hence het stukje uit mijn inleiding, ik ben goed in bestaande code aanpassen en gebruiken
).
In plaats van de edit.php en delete.php files post ik nu naar self want de pagina's met formulieren beginnen met
Maar ook hier begint het te jeuken bij mij, want zo eindig ik op een gegeven moment ook weer met heel veel if/elseif voor alle mogelijke formulieren. Ik wil niet continu een extra functie blijven maken voor als ik weer iets nieuws verzien wat met een formulier toegevoegd kan worden.
Tot nu toe is dit allemaal een leuke leerschool geweest, alleen het probleem is dat ik elke keer iets aan het maken ben op de manier waarop ik tot dan toe denk: Dit is het!
Tot ik aan het eind van de rit nieuwe termen lees en denk: Oef...ik had het veel beter zo kunnen doen. Zo leer je natuurlijk, maar op een gegeven moment ben je daar ook wel klaar mee
Nu heb ik namelijk een hele tutorial over MVC achter de rug en waar ik net van af gestapt ben (edit.php?type=user&id=9) komt dan in zeker opzicht weer terug door de controllers en dergelijke.
Ik lees ook dingen over Frameworks, Symfony bijvoorbeeld. Maar dat vind ik nog best moeilijk, als ik die tutorial lees. Het gevoel wat ik daar bij krijg is: veel te veel mogelijkheden voor de simpele web-apps die ik bouw. Sterker nog, ik wil mijn eigen classes en functies maken om zo te kunnen blijven leren, al gaat een framework vast 10x zo snel.
Conclusie: Waar kan ik het het beste mijn aandacht op richten? Zoals je merkt spring ik wellicht van de hak op de tak (of zit er toch een bepaalde lijn in?) omdat ik natuurlijk nooit geleerd heb 'hoe het echt moet'. Vandaar de topic titel: Best practices. Natuurlijk heeft ieder zijn eigen voorkeur (wel of geen MVC, frameworks, etc) en hangt het van de web-app af.
Maar wat zou in het algemeen de best practice zijn voor een web-app waarin je vrij 'standaard' new, edit en delete-acties doet? Nieuwe users, nieuwe artikelen, nieuwe cd voor je cd-collectie, noem het maar op. Ik heb nu elke pagina zijn eigen hardcoded.php gegeven. Gelukkig heb ik wel een algemene header en een algemene footer om te voorkomen dat ik 25 files langs moet als ik iets in de header aanpas. Maar misschien zijn views ook wel wat, dan is er nog meer gestandaardiseerd.
Mijn doel is uit eindelijk om een 'echte' web-app op te zetten. Dus naast de standaard new, edit en delete acties ook settings en widgets. Nu zijn alle settings hard-coded en die wil ik op een gegeven moment ook via het web kunnen aanpassen. Ook daar zoek ik weer naar de 'beste' manier: Zoals dit, of dit.
Hoe krijg ik structuur in mijn zoektocht/leerschool? Zijn er mooie ebooks, tutorials of webinars die ik kan doornemen om te voorkomen dat ik versie 4.0, 5.0, 6.0 krijg en iets nooit af komt? En dan misschien met name de filosofie achter classes bijvoorbeeld? Ik heb het idee dat ik ze een beetje verkeerd gebruik cq misbruik. Maar dat kan ook komen omdat ik die PHP Login als basis gebruik om mijzelf classes aan te leren (en dus de __construct voor alles misbruik).
Ik zal als eerste even de situatie schetsen, dan weten jullie een beetje de achtergrond en de insteek van mijn verhaal cq topic
Ik mag graag digitale zaken bouwen. Het begon met mijn 'computerbedrijfje'. Ik wilde mijn klanten en werkzaamheden bijhouden om zo gestructureerd en professioneel te kunnen werken. Dit begon met het bouwen van een database in Access, maar omdat het van scratch opbouwen nog veel werk was in mijn beginjaren (geen IT-opleiding, alles zelf aangeleerd door uitproberen en een heleboel lurken op tweakers) heb ik de Northwind database gepakt en die een beetje getweaked.
Code van scratch opbouwen gaat niet zo snel, maar bestaande code lezen, begrijpen en ombouwen naar mijn wensen kan ik wel vrij snel. Die approach gebruik ik tot op de dag toe vandaag ook nog.
Ik zal nog even doorgaan op mijn inleiding. Die Northwind database werkte prima, behalve één ding: ik kon onderweg geen gegevens invoeren en/of er bij pakken. Dus: een webapp. Ook dat heb ik eerst van scratch geprobeerd, wat op zich redelijk lukte, maar codetechnisch zit het vast en zeker niet zo goed in elkaar.
Dus heb ik de voorbeelden van XAMPP (de muziek-collectiedatabase) gebruikt en omgebouwd naar mijn wensen, en zodoende geleerd hoe ik met SQLite en PDO om kon gaan, en ik kon gegevens lezen wen wegschrijven naar de database. Een vleugje AJAX en wat Responsive webdesign, en ik had een leuke web-app die goed werkte onderweg.
Afijn, aangezien ik blijf leren (in elke tutorial lees je wel eens wat moeilijke termen, en als ik die nazoek dan kom ik opeens in een heel ander niveau van PHP) kom ik ook steeds stapjes hoger.
Mijn volgende web-app was een soort mini-CMS, die werd al iets moeilijker door het inlezen van bestaande CMS-data en vervolgens uit te lezen en te manipuleren in mijn webapp, maar ook dat werkte.
Op een gegeven moment zag ik het woordje 'Bootstrap' en toen ik dat nazocht ging er weer een nieuwe wereld voor mij open. Tevens werden mijn website design-technisch ook opeens 100x zo mooi
Dus, nieuw projectje bedacht, weer van scratch begonnen (want ik wil mezelf elke keer overtreffen) en CMS 2.0 gemaakt. Zelfde functies als mijn eerste mini-CMS, maar PHP-technisch sterker. Ik las in een turoial over PHP functions en wéér ging er een wereld open, sterker nog, mijn code werd opeens ook overzichtelijker, haha. Waar ik alleen nog niet zo zeker over was is het volgende:
Alle 'actie-linkjes' (dus toevoegen van user, verwijderen van user, editen van user-data) POSTen hun data naar de respectievelijke 'actie-pagina's'. Dus, in mijn tabel met users staat achter elke user een potloodje en een prullenbakje, die linken naar /edit.php?type=user&id=1 of /delete.php?type=user&id=1.
De edit.php werd op een gegeven moment langer en langer, want naast users had ik ook contacts, adresses, enzovoort. Dus kreeg ik:
PHP:
1
2
3
4
5
| if ($type=='user') { //query dit en dat } elseif ($type=='contact') { //query voor contacpersonen } //enzovoort |
Voor mijn gevoel kon het nooit de bedoeling zijn dat ik straks eindig met ontzettend lange edit.php's vanwege alle if/else voor alle mogelijke uitkomsten, dus zocht ik verder.
Zo kwam ik na het lezen van veel tutorials en mijn favo-site StackOverflow een term tegen en zodoende weer in een hoger niveau terecht: OOP met z'n classes.
Man man man, dat was pas wat... in plaats van 4 dezelfde queries kon ik gewoon:
PHP:
1
2
| $nummer1 = new OpzoekQuery(); $nummer2 = new OpzoekQuery(); |
doen. Dat scheelde pas een boel werk!
Dus, CMS 2.0 is gebouwd met een aantal classes en functies. Werkt al een heel stuk makkelijker en beter. Mijn login-systeem is op basis van PHPLogin en met behulp van die class heb ik ook mijn andere classes geschreven (hence het stukje uit mijn inleiding, ik ben goed in bestaande code aanpassen en gebruiken
In plaats van de edit.php en delete.php files post ik nu naar self want de pagina's met formulieren beginnen met
PHP:
en in de class heb ik:1
| $form = new form(); |
PHP:
1
2
3
4
5
6
7
8
9
| class form { public function __construct() { if (isset($_POST["add-user-submit"])) { //bla bla } } } |
Maar ook hier begint het te jeuken bij mij, want zo eindig ik op een gegeven moment ook weer met heel veel if/elseif voor alle mogelijke formulieren. Ik wil niet continu een extra functie blijven maken voor als ik weer iets nieuws verzien wat met een formulier toegevoegd kan worden.
Tot nu toe is dit allemaal een leuke leerschool geweest, alleen het probleem is dat ik elke keer iets aan het maken ben op de manier waarop ik tot dan toe denk: Dit is het!
Tot ik aan het eind van de rit nieuwe termen lees en denk: Oef...ik had het veel beter zo kunnen doen. Zo leer je natuurlijk, maar op een gegeven moment ben je daar ook wel klaar mee
Nu heb ik namelijk een hele tutorial over MVC achter de rug en waar ik net van af gestapt ben (edit.php?type=user&id=9) komt dan in zeker opzicht weer terug door de controllers en dergelijke.
Ik lees ook dingen over Frameworks, Symfony bijvoorbeeld. Maar dat vind ik nog best moeilijk, als ik die tutorial lees. Het gevoel wat ik daar bij krijg is: veel te veel mogelijkheden voor de simpele web-apps die ik bouw. Sterker nog, ik wil mijn eigen classes en functies maken om zo te kunnen blijven leren, al gaat een framework vast 10x zo snel.
Conclusie: Waar kan ik het het beste mijn aandacht op richten? Zoals je merkt spring ik wellicht van de hak op de tak (of zit er toch een bepaalde lijn in?) omdat ik natuurlijk nooit geleerd heb 'hoe het echt moet'. Vandaar de topic titel: Best practices. Natuurlijk heeft ieder zijn eigen voorkeur (wel of geen MVC, frameworks, etc) en hangt het van de web-app af.
Maar wat zou in het algemeen de best practice zijn voor een web-app waarin je vrij 'standaard' new, edit en delete-acties doet? Nieuwe users, nieuwe artikelen, nieuwe cd voor je cd-collectie, noem het maar op. Ik heb nu elke pagina zijn eigen hardcoded.php gegeven. Gelukkig heb ik wel een algemene header en een algemene footer om te voorkomen dat ik 25 files langs moet als ik iets in de header aanpas. Maar misschien zijn views ook wel wat, dan is er nog meer gestandaardiseerd.
Mijn doel is uit eindelijk om een 'echte' web-app op te zetten. Dus naast de standaard new, edit en delete acties ook settings en widgets. Nu zijn alle settings hard-coded en die wil ik op een gegeven moment ook via het web kunnen aanpassen. Ook daar zoek ik weer naar de 'beste' manier: Zoals dit, of dit.
Hoe krijg ik structuur in mijn zoektocht/leerschool? Zijn er mooie ebooks, tutorials of webinars die ik kan doornemen om te voorkomen dat ik versie 4.0, 5.0, 6.0 krijg en iets nooit af komt? En dan misschien met name de filosofie achter classes bijvoorbeeld? Ik heb het idee dat ik ze een beetje verkeerd gebruik cq misbruik. Maar dat kan ook komen omdat ik die PHP Login als basis gebruik om mijzelf classes aan te leren (en dus de __construct voor alles misbruik).