Hoi, 2014-07-14 12:32 GMT+02:00 Wichert Akkerman <wich...@wiggy.net>: >> Pyramid doet toch alleen traversal naar models met views erop? Routes >> gaan in Pyramid toch direct naar views? Voegt rest-toolkit dan niet >> routing naar models toe? > > Pyramid, en repoze.bfg daarvoor, heeft altijd al twee publicatie modellen > gehad: traversal zoals Zope dat > kent, en het meer bekende URL dispatch waarbij je grofweg een URL via een > regexp matched met een route. > Een route heeft dan weer een context factory die je de context geeft, en bij > de route of route+context kan je > dan views registeren. Je kan zelfs helemaal los gaan en ze combineren.
Het context verhaal heb ik wel eens gelezen. Het lijkt me dat dit toch ietwat anders is dan een view lookup op de context zoals bij traversal. Het is meer een manier om een view van een context te voorzien. Hoewel het registreren van een view op "route+context" dan weer wel daarop lijkt. Dat heb ik in de docs nog niet teruggevonden. Echt routen naar models valt natuurlijk te bouwen in Pyramid -- het is een erg flexibel ding. Er staat dan een wel waarschuwingsteken in de handleiding bij het combineren van traversal en routing. :) > rest-toolkit bouwt op dat systeem voort, maar introduceert het dus niet zelf. Pyramid heeft een filosofie van geen policy, dus dan is het handig als er een laagje komt wat het een en andere duidelijker maakt. Het "routing to models" valt veel meer op in rest-toolkit. >> De meeste web frameworks denken dat een route naam met een manier om >> via de naam een link te genererenn goed genoeg is voor link generatie. >> Ik denk daar nogal anders over. Morepath associeert routes met model >> classes zodat om een link naar een model instance kan vragen. > > Dat is wel anders, en heeft een redelijk belangrijk minpunt: je forceert een > 1-op-1 mapping tussen models en > URLs, terwijl het niet ongebruikelijk is om hetzelfde model voor meerdere > URLs te gebruiken. Ja, da's een beperking. Maar ik denk meestal een goede: waarom laat je het model nu op meerdere plekken terugkomen als je gewoon een link kan maken? De voordelen zijn natuurlijk dat je zonder nadenken en opzoeken van een route naam kunt linken. Maar er zijn natuurlijk tradeoffs. Maar je kunt in Morepath overigens ook dezelfde model class op meerdere plekken gebruiken, als het maar in een andere applicatie is (in dezelfde runtime). > Ik zal nooit models rechtstreeks aan URLs linken omdat ik dat als een > anti-pattern zie, maar het is natuurlijk > vrij makkelijk voor iemand om dat bovenop rest-toolkit te doen. Het concrete patroon in rest toolkit lijkt op dat van Morepath. Je hebt in rest-toolkit resources. Die hebben een pad via een route. Je hebt views die je aan resources hangt. Je kunt met SQLResource blijkbaar een SQLAlchemy object als context in de view gebruiken ipv de resource zelf, maar hoe dat precies gaat is me niet helemaal duidelijk. In Morepath doe je wat jij met resources doet met models. Die kunnen of uit een database komen, of ze kunnen applicatie-specifiek zijn (collecties meestal), dat kan Morepath niets schelen. De applicatie specifieke models kunnen dan weer queries doen, zoals jij doet in resources. Verschil is dat een model geen request heeft zoals resources - dat wordt altijd in een Morepath view afgehandeld, en models weten niks van het web. Ander verschil: het ophalen van models vanuit de route in Morepath gaat via een functie die een query kan doen of een applicatie-specifieke model instance kan maken, of wat dan ook. Maar hoewel er verschillen zijn in de aanpak lijken de concrete patronen erg op elkaar. Waar ik met een applicatie-model aankom voor de gevallen waar een database-backed model niet genoeg is, doe jij dat per default met resources, maar heb je een SQLResource om het database-backed model gebeuren gemakkelijker te maken. Ik zal de onconstructieve opmerking zonder verklaring over anti patterns verder maar negeren, want ik kan niet zien wat je bedoelt en er dus ook geen weerwoord op geven. Groeten, Martijn _______________________________________________ Python-nl mailing list Python-nl@python.org https://mail.python.org/mailman/listinfo/python-nl