On Mon, Apr 15, 2013 at 1:22 PM, Donald Stufft <[email protected]> wrote:
> > On Apr 15, 2013, at 1:16 PM, Alex Ogier <[email protected]> wrote: > > The problem I have with fallthrough-based dispatch is that it encourages > really expensive performance-killing patterns, where you end up doing a > linear scan over view functions round-tripping to the database for each one > to see if the view can handle the request. multiurl is sort of nice because > it least it's obvious that what it's doing might be expensive, and the > whole linear scan is collected in one place so if it gets too long it looks > "wrong" in a Joel Spolsky sense. > > > I don't see how including the method in the resolution scheme equates to > hitting the database. > Oh sorry, I wasn't totally clear. I am advocating a system where people are encouraged to make intelligent dispatch decisions like this one early in the routing framework *instead* of with a try-catch-fallthrough pattern. Anything that lets you avoid doing extra work through a little up-front intelligence is a plus in my book, and I think it's a shame that there aren't really any good hooks to make these kinds of intelligent decisions in the routing framework. django-multiurl has already done a lot of the heavy lifting to make multiple URLs for the same regex work in a clean way outside of core, but it uses this onerous pattern of calling views and expecting them to fail in a specific way. So I am proposing that it could easily be made to have all the right hooks to make arbitrary intelligent routing decisions. I think we're on the same side here, except that you want this in core. Best, Alex Ogier -- You received this message because you are subscribed to the Google Groups "Django developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-developers?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
