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

Antwoord per e-mail aan