League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
[ Voor 39% gewijzigd door RobIII op 23-02-2011 11:49 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Het is ook geen concrete vraag, ik vraag in dit topic eigenlijk ook meer naar de ervaringen van anderen en hoe hun er tegen aankijken. Iedereen heeft z'n eigen aanpak hierin.RobIII schreef op woensdag 23 februari 2011 @ 11:47:
Als je nou eens begint met een tutorial MVC en daar probeert voor jezelf de beste aanpak voor jezelf uit te destilleren? Ik zie in je topic eigenlijk niet echt een concrete vraag behalve "leer mij eens effe MVC in dit topic"
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
En keihard roepen dat PHP dan niet direct html mag uitspugen vind ik te kort door de bocht.
Mocht je op een *echt* groot project zitten (als in > 15 man, meer dan 100 pagina's enzo) dan is dat misschien slim om te doen.
Ikzelf had vaak:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <html> <head> <title> <? GlobalContainer.GetTitle() ?> </title> </head> <body> <div id='header'> <? include header.php ?> </div> <div id='body'> <? include body.php ?> </div> <div id='footer'> <? include footer.php ?> </div> </head> </html |
Of jij dit acceptabel vind is geheel aan jou...
Even niets...

Zo.
Die handler zou je er strict gesproken niet bij moeten gebruiken, maar aangezien mijn models gegenereerd zijn door een zelfgeschreven "model maker" doe ik het wel
Dan heb ik de view-laag die is opgebouwd uit smarty templates, en een folder met 'loggedin', dat zijn de templates voor mensen die ingelogd zijn. Deze overschrijven de standaardtemplates als ze zijn ingelogd. Dit wordt geregeld door mijn tussenlaag 'Templatemanager'. Hierbij kan ik dus ook nog switchen van smarty naar een ander templatesysteem.
Mijn control-laag heeft dezelfde opzet wat betreft ingelogde gebruikers waarbij de 'ingelogde class' de 'oningelogde class' extend en uitbreid, of zonodig overschrijft. De method names zijn de functies die extern benaderbaar zijn, zo maak je eigenlijk je method een pagina. Als je dus website.nl/user/view/12 als url neemt dan wordt de class UserControl ingeladen, welke UserControlBase inlaadt, waarna van UserControl de method ->view(12); wordt aangeroepen. Dit allemaal natuurlijk allemaal gecontroleerd met o.a. method exists en andere controles.
De controle en aanroep van al deze meuk gebeurt vrij simpel in index.php, welke samen met .htaccess de enige twee bestanden zijn die publiekelijk benaderbaar zijn. De rest zit allemaal buiten de www-root.
In de 'inc'-folder zitten bijvoorbeeld de externe pakketten van Smarty, XMoov, PHPMailer, etc.
Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.
Verwijderd
Wat ik voornamelijk geprobeer heb is om dit kleine en licht te houden en niet, zoals bij Zend bijvoorbeeld, een mega library te creeren maar juist puur een goede stabiele core te bouwen die makkelijk uit te breiden is binnen het applicatie domein.
Verwijderd
Het is niet zo moeilijk om te maken als je veel ervaring hebt met PHP. Ik heb 1 generieke index pagina, 1 generieke controller, 1 model per database tabel en meerdere views per model. Een aanroep gaat als volgt:
1. Gebruiker vraagt op: users/detail/10
2. index pagina: check toegangsrechten voor de ingelogde gebruiker. Zet model op user, actie op detail en roep de controller aan.
3. controller: controleer of model user bestaat en of er een detail view is voor de tabel user. Roep in het model de functie getOne() aan
4. model: zet db connectie op, vraag gegevens op uit tabel user met id=10. Sla de array op in $result oid.
5. views/user/detail: html code met daarin verwerkt gegevens uit $result.
De meningen verschillen over het aantal controllers en index pagina's, maar voor de meeste pagina's zul je een viewAll, viewOne, edit en delete mogelijkheid willen hebben. Een generieke controller, die ook controleert of de methodes bestaan (function_exists en file_exists) werkt bij mij iig probleemloos. Een nieuwe tabel toevoegen duurt meestal maar een paar minuten: kopieer model en pas het aan, kopieer views en pas ze aan en het werkt, controller en index pagina controleert alles.
Als je echter denkt van 'goh, wat ben ik pr0', ga dan eens Zend Framework bekijken en de hele tutorial / quickstart proberen, die leert je sowieso over het MVC model zoals dat binnen ZF gedaan wordt. Cake etc zijn goeie alternatieven, maar bij Zend heb ik toch het gevoel dat ze een stuk professioneler zijn.
Wat je natuurlijk ook kunt doen is eens overstappen op een andere taal - doe eens Java met bijv. Spring Framework / Spring MVC. Dat is wel vijf keer zo moeijlijk (qua leercurve) dan doorborduren op PHP, maar als je tijd, geduld en natuurlijk de leerskillz hebt zal dat je flink veel nieuwe inzichten geven. Desnoods kun je beginnen door een kant-en-klare webapp gegenereerd door AppFuse aan te passen. Natuurlijk moet je dan ineens heel veel leren (Java, Java webapps (Jetty), externe build tools (Maven), dependency management (ook met Maven) Hibernate (of JPA), Spring (met daarin Spring MVC, dependency injection, etc), etc), maar daar is nog nooit iemand aan doodgegaan.
Wie weet dat je, als je dat allemaal kent, net zo cynisch wordt over PHP als mensen zoals ik
How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.
Verwijderd
De codeigniter video tutorial is trouwens een aanrader als je snel (20 minuten) wilt leren hoe MVC in de praktijk werkt.zwippie schreef op woensdag 23 februari 2011 @ 14:30:
Je noemt in je topicstart drie punten die alleen maar met de View te maken hebben. MVC is meer dan views/templating. Ik zou je willen aanraden om meer te lezen over het onderwerp en eens te stoeien met CodeIgniter of Zend Framework. CodeIgniter is wellicht het meest laagdrempelig.
Precies, en MVC is ook niet meer dan een manier om verantwoordelijkheden in een applicatie te scheiden. De implementatie van de drie delen is in veel frameworks en applicatie anders, maar het achterliggende idee is juist hetzelfde. Een pattern gebruiken is leuk, maar een pattern goed toepassen is de kunst. MVC toepassen voor web-based applicaties is heel anders dan voor desktop applicaties.zwippie schreef op woensdag 23 februari 2011 @ 14:30:
Je noemt in je topicstart drie punten die alleen maar met de View te maken hebben. MVC is meer dan views/templating.
Voor iedere laag is wel een andere aanpak te noemen. Views kun je met een observer pattern implementeren (voor web-based niet echt handig), of met simpele PHP templates (export() wordt daar veel voor gebruikt om variabelen naar de local symbol table kopieren). De controller kun je opdelen in modules, en als een dispatcher implementeren. De model laag kun je door een database abstraction layer halen (Doctrine, Propel, etc), of gewoon zelf schrijven als je niet veel code hebt.
Die drie opties hebben dan ook niet veel te maken moet hoe je MVC zou kunnen toepassen.Jeffroiscool schreef op woensdag 23 februari 2011 @ 11:46:
1. Mensen die gebruik maken van een bestaand iets zoals Smarty en andere Template Engines.
2. Mensen die dit zelf scripten d.m.v render classes en dergelijke.
3. Mensen die het gewoon niet doen.
Verwijderd
Wat mij altijd een beetje dwarszit met Java en Spring / Hybernate / etc is dat het allemaal losse implementaties zijn die bij elkaar gebruikt er krachtig zijn maar zeker niet lightweight te noemen. Het feit al dat Java een framework nodig heeft voor dependency injection door het gebrek aan multiple inheretance en mixins vind ik een beetje vreemd.
Voor de gemiddelde website is Java dan ook meestal echt overkill. Daarnaast is inderdaad de leercurve vrij steil voor een n00b en ik denk juist dat het 'aanklooien' in PHP wel een redelijke basis kan zijn om niet helemaal onderaan die leercurve te hoeven beginnen.
Als je echt in MVC wil duiken zou ik gewoon meerdere frameworks gaan proberen en eventueel door de code gaan spitten om te kijken hoe bepaalde dingen opgelost zijn. Daarnaast is het natuurlijk altijd goed om de theorie achter MVC en andere design patterns eens in te lezen, want MVC is meestal maar een klein deel van wat een framework doet.