[PHP/MVC] Routes registreren of in DB plaatsen ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In een MVC wat ik aan het bouwen ben heb ik aan de hand van een aantal voorbeelden en tuts ervoor gekozen om routes te registreren doormiddel van:

code:
1
$router->registerRoute(new Route('url achter de tld slash', 'controllernaam', 'actie'));


Uiteraard ga je heel veel routes krijgen op deze manier wat opzich een logisch gevolg is.

Omdat ik naar een match zoek in een url en en daarvoor een match-check moet doen op de routes dien ik alle routes ook daadwerkelijk te laden, iets wat niet ideaal is en mijn inziens echt rete traag kan worden.

Nu was mijn idee om alle routes in een database te knallen en gewoon aan de hand van een query je controller en actie op te vragen.

Een database query brengt uiteraard ook load met zich mee echter een een database daarop gemaakt en aangezien we geen apache of DNS queries doen welke wel tricky zijn om uit een DB te halen maar een route voor een MVC mijn inziens toch echt minder, lijkt me dit een goede optie.

Gevoelsmatig ligt het ergens in het midden en wilde ik jullie opinie hier eens om vragen.

Brand los zou ik zeggen :)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Probeer het? :) Bouw het in en gooi er vervolgens een stresstest tegen aan. Het is ws ook een beetje afhankelijk van de hoeveelheid gebruikers die je verwacht.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zend Framework pakt standaard de segmenten op als "(module)/controller/action" waarbij een module optioneel is. Je hebt voor alle standaard acties dus geen losse routes nodig, pas als je afwijkt van die structuur heb je dat nodig, dat scheelt performance. Ik zou je routes in een config file plaatsen ipv. in een database, een config heb je vaak sowieso al dus dat kost weinig extra resources tov. een extra query.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gorgi_19 schreef op zondag 25 oktober 2009 @ 20:56:
Probeer het? :) Bouw het in en gooi er vervolgens een stresstest tegen aan. Het is ws ook een beetje afhankelijk van de hoeveelheid gebruikers die je verwacht.
Ik verwacht toch zeker wel wat gebruikers... ik ga uit van veel :+

Een test is altijd een goede referentie, ik wil alleen niet echt van proven standaarden hiervoor afwijken.... vandaar.
Cartman! schreef op zondag 25 oktober 2009 @ 21:19:
Zend Framework pakt standaard de segmenten op als "(module)/controller/action" waarbij een module optioneel is. Je hebt voor alle standaard acties dus geen losse routes nodig, pas als je afwijkt van die structuur heb je dat nodig, dat scheelt performance. Ik zou je routes in een config file plaatsen ipv. in een database, een config heb je vaak sowieso al dus dat kost weinig extra resources tov. een extra query.
Aangezien mijn framework dusdanig flexibel is kan ik een dergelijke segment structuur wel toepassen, aangezien een route eigenlijk ook op die manier werkt alleen vergeleken wordt.

Jij denkt dat een config file met tussen de 100 en 200 routes (welke ik niet ga halen denk ik ;)) geen performance issue zou moeten opleveren ?

Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 17-09 13:58

Kwastie

Awesomeness

Ik heb een tijdje geleden nog iets soortgelijks gemaakt.

Na wat testen heb ik gekozen om de routing-lines op te slaan in een database, maar wel alles te cachen met MemCached. (query-result caching).

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Wat zijn "heel veel routes"? Hoeveel mogelijke acties ga je krijgen, en waarom kan je dat niet afvangen met bijvoorbeeld mod_rewrite?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CodeCaster schreef op zondag 25 oktober 2009 @ 21:50:
Wat zijn "heel veel routes"? Hoeveel mogelijke acties ga je krijgen, en waarom kan je dat niet afvangen met bijvoorbeeld mod_rewrite?
Hier kan ik heel kort in zijn.... MVC is zoveel overzichtelijker en minder config gedoe met mod_rewrite. Lees eens over singleton.
Kwastie schreef op zondag 25 oktober 2009 @ 21:47:
Ik heb een tijdje geleden nog iets soortgelijks gemaakt.

Na wat testen heb ik gekozen om de routing-lines op te slaan in een database, maar wel alles te cachen met MemCached. (query-result caching).
Hier kan ik zeker wat mee, cache was zeker iets wat ik wilde overwegen !

Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
De relatie tussen dit topic en singleton ontgaat mij geheel. Caching is verder inderdaad de meest voor de hand liggende oplossing, al zou je altijd het aantal acties eens kunnen bekijken en eventueel kunnen minimaliseren. Nog beter zou zijn de routes in een statisch PHP bestand te zetten en deze door middel van APC in de bytecode cache (liefst met apc.stat=0) zetten, dan is er vrijwel geen overhead om de routes op te halen.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Verwijderd schreef op zondag 25 oktober 2009 @ 21:54:
[...]


Hier kan ik heel kort in zijn.... MVC is zoveel overzichtelijker en minder config gedoe met mod_rewrite. Lees eens over singleton.
Vandaar dat je een topic opent over het configureren van routes ;) Een singleton heeft hier verder weinig mee te maken, dat is een object waarvan slechts één instantie bestaat.

Ik vroeg hoeveel acties je krijgt. Als je voor een url à la "news/view" of "news/list" of "news/archive" wil routeren naar een aparte pagina, is een enkele regel in mod_rewrite genoeg.

Niet om dit af te kraken, het bestaat vast niet voor niks, maar wat is er het praktisch nut van?

[ Voor 8% gewijzigd door CodeCaster op 25-10-2009 22:01 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 17-09 13:58

Kwastie

Awesomeness

Verwijderd schreef op zondag 25 oktober 2009 @ 21:54:
[...]

Hier kan ik heel kort in zijn.... MVC is zoveel overzichtelijker en minder config gedoe met mod_rewrite. Lees eens over singleton.
Het Singleton pattern heeft hier niets mee te maken, wat singelton (kortweg) inhoud is dat je een één object niet meer dan één instantie wilt kunnen aanmaken.

Maar je hebt wel gelijk dat bij een MVC framework het rewriten van urls over het algemeen een stuk gemakkelijker is omdat alles via een generieke manier geconfigureerd kan worden.

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Hoe groot gaat je site worden als je 200 routes nodig hebt? Routing zou er enkel bij te pas moeten komen als de standaard manier van routing (die ik eerder beschreef) niet van toepassing is. Wat wil je als url-structuur hanteren vraag ik me dan af.

Cache is sowieso een goed idee, ik gebruik zelf Zend_Cache met full page caching, die gebruikt geen eens routing (of een database) als ie een cachehit tegenkomt.
Ik vroeg hoeveel acties je krijgt. Als je voor een url à la "news/view" of "news/list" of "news/archive" wil routeren naar een aparte pagina, is een enkele regel in mod_rewrite genoeg.

Niet om dit af te kraken, het bestaat vast niet voor niks, maar wat is er het praktisch nut van?
De enige mod_rewrite regels die je met MVC nodig hebt is om alles wat niet verwijst naar een bestaand bestand te rewriten naar index.php, nooit aanpassingen nodig aan je .htaccess (of httpd.conf) als je een nieuwe pagina wilt routen.

Voor dingen als /nieuws/ en /nieuws/bekijken/id/1 heb je bij Zend Framework standaard helemaal niks nodig, hij route het zelf naar NieuwsController.php met bekijkenAction(). Hoe makkelijker wil je t hebben? :)

[ Voor 47% gewijzigd door Cartman! op 25-10-2009 22:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op zondag 25 oktober 2009 @ 22:04:

De enige mod_rewrite regels die je met MVC nodig hebt is om alles wat niet verwijst naar een bestaand bestand te rewriten naar index.php, nooit aanpassingen nodig aan je .htaccess (of httpd.conf) als je een nieuwe pagina wilt routen.
Dat noemt men, juist of niet juist, vaak een singleton. De index.php is de zogenaamde singleton dan uiteraard.

Wat je aangeeft is overigens de basis mod_rewrite voor iedere MVC.
Voor dingen als /nieuws/ en /nieuws/bekijken/id/1 heb je bij Zend Framework standaard helemaal niks nodig, hij route het zelf naar NieuwsController.php met bekijkenAction(). Hoe makkelijker wil je t hebben? :)
Daar heb ik geen zend voor nodig hoor, dit doet mijn framework ook, alleen heb ik nu handmatig de routes erin staan en kan ik een nieuws link naar een archief controller leiden als ik dat wil.

Ik kan het oppikken ook automatisch laten doen, echter is het best handig dat je meerdere routes naar 1 controller kan laten verwijzen bijvoorbeeld.... en in een database is natuurlijk helemaal overzichtelijk.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op zondag 25 oktober 2009 @ 22:16:
[...]


Dat noemt men, juist of niet juist, vaak een singleton. De index.php is de zogenaamde singleton dan uiteraard.

Wat je aangeeft is overigens de basis mod_rewrite voor iedere MVC.
De term singleton heb ik daar nog nooit van gehoord maar dat kan aan mij liggen :) Dat dit de standaard is voor MVC is mij bekend, waarom je dit er zo neerzet is me niet helemaal duidelijk?
Daar heb ik geen zend voor nodig hoor, dit doet mijn framework ook, alleen heb ik nu handmatig de routes erin staan en kan ik een nieuws link naar een archief controller leiden als ik dat wil.
Ik zeg niet dat je Zend Framework moet gebruiken maar ik geef alleen aan dat je bezig bent het wiel opnieuw uit te vinden. Het nut van een nieuwslink naar een archief controller te herschrijven ontgaat me een beetje, hoe zie je dat voor je? Bericht met id 1 gaat naar controller A en bericht met id 2 naar controller B? Dat lijkt me iets in de opmaak wat thuishoort in je view. En als je wilt linken naar iets wat een archief heet dan is het een andere url (vind ik logischer althans) en kom je automatisch op een andere controller (danwel action) uit.
Ik kan het oppikken ook automatisch laten doen, echter is het best handig dat je meerdere routes naar 1 controller kan laten verwijzen bijvoorbeeld.... en in een database is natuurlijk helemaal overzichtelijk.
Meerdere routes naar 1 controller, dat lijkt me logisch ja gezien controllers vaak meerdere actions hebben. Echter mis je de insteek, als jij de url /nieuws/overzicht hebt kun je deze standaard rewriten naar je nieuwscontroller en overzicht action. Als je een 2e andere url hebt die naar precies hetzelfde verwijst (waarom je dat zou willen is me een raadsel, gebruik dan gewoon de normale url) kun je die toevoegen als route. Ik zou er niet aan moeten denken om iedere handeling op m'n sites toe te voegen als route, dat zouden er een berg zijn :o

toevoeging:
bottomline van mn advies: laat standaard een url herschrijven naar /controller/action (evt. module ervoor) en maak alleen voor uitzonderingen custom routes aan.

[ Voor 4% gewijzigd door Cartman! op 25-10-2009 23:00 ]


Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Nu online
Verwijderd schreef op zondag 25 oktober 2009 @ 22:16:
[...]


Dat noemt men, juist of niet juist, vaak een singleton. De index.php is de zogenaamde singleton dan uiteraard.
Lijkt mij eerder single point of entrance, waarvoor we het frontcontroller pattern kennen.
Cartman! schreef op zondag 25 oktober 2009 @ 22:53:
Als je een 2e andere url hebt die naar precies hetzelfde verwijst (waarom je dat zou willen is me een raadsel, gebruik dan gewoon de normale url) kun je die toevoegen als route.
Afkortingen? Zoals je vaker in reclames hoort, ga naar www....nl/reclame, dat je hier dan automatisch een route aanhangt van /acties/view/id=5 of iets dergelijks (alleen ga je dan naar een specifieke pagina en niet naar controller/actie). Of met vertalingen nieuws/bekijken is hetzelfde als news/view, lijkt me niet dat je daarvoor aparte controllers wil maken, aangezien hetgeen wat gebeurd precies hetzelfde is, alleen de tekst is in een andere taal. Deze is dan al geen uitzondering meer maar zul je altijd hebben in een multi-language site, dit wil je dus zeker ergens opslaan, want met van controller/actie rechtstreeks omzetten naar bestanden/mappen kom je dan al niet ver.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Dan nog steeds ga ik de combinaties die standaard al werken (news/view als je controller News heet) nog eens extra opslaan als het systeem standaard al zo werkt. Is overbodige overhead want zonder die "standaard" routes werkt het ook al.

Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 08:36
Ik werk zelf met CakePHP en hierbij gebruik ik in mijn code graag engelse controller- en action namen. Voor een nederlandse site moet ik dus in mijn Routerconfig deze vertalen naar Nederlandse. Dat lijkt me een goede reden. Daarnaast kan je met routers dingen toch korter maken, /nieuws/ naar /news/overview/ en /nieuws/<slug> naar /news/view/<slug> bijvoorbeeld. Volgende de Cake-manual moet je bij het maken van controllers en actions geen rekening houden met URLs en dat lijkt me wel zo verstandig.

[ Voor 4% gewijzigd door Ramon op 26-10-2009 09:17 ]

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/

Pagina: 1