Hi,

* I am delighted that the root request mapper is also pluggable and that request mappers can easily decorate other request mappers.

* In the new setup, am I correct in assuming that you can override the root request mapper to make it possible to parse parameters for the 'home page'? I am looking for an easy way to parse URIs like "/?p1=v1". I see that the example app still needs to override getHomePage. I guess this is no longer needed always.

* With all respect to the given code, good names are important and therefore comments on names are important as well. A good name will deepen understanding. I too find that overloading of these 2 method names is not correct as they do not perform the same function.

* There is also a little bell in my head saying that the 2 map methods are not symmetric. I guess this can not be helped as incoming requests have post data where as generated URLs do not. I like the URL class, in a RequestMapper decorator it makes it possible to manipulate the URL that was given by the chained RequestMapper.

* I am a bit confused about the RequestHandler interface. It contains nothing to get the request's parameters. How is method RequestMapper#map(RequestHandler) supposed to work then? I guess it will always need to know about the types of RequestHandlers it supports. This introduces a tight coupling I did not expect. (I am not saying it is wrong, it just confused me.)

* I don't like AbstractRequestMapper. Its sole function is to provide helper methods. These are better located in a separate helper class.

* Its not yet clear to me how to implement pages that put part of the parameters in the URL and part in the page state. E.g. for a product list page put the product category in the URL and the current sort order in a component field. Will this be possible? Easy?

* I guess BufferedResponseMapper#getCompatibilityScore should return Integer.MIN_VALUE (instead of 0) when it can not process the request. Or is 0 a kind of magic value?

* What MountedMapper does is priceless!

* When I look at ThreadsafeCompoundRequestMapper I am a (little) bit worried about performance. The main worry is that methods are called multiple times for the same request. For example method getCompatibilityScore of the nested RequestMappers is called in both map(Request) as in getCompatibilityScore. A request mapper can not simultaneously calculate a map and a compatibility score precluding some optimizations.

My time is up. This is definitely an improvement over previous implementations. Even though there are still some corner cases (I still see a few instanceof's), it is much more straight forward. I hope to see this code merged as soon as possible.

Regards,
   Erik.


Igor Vaynberg wrote:
as ive mentioned before, the focus of 1.5 will be the overhaul of how
we handle the urls and process requests. this part of wicket has grown
organically and has turned into a bunch of overcomplicated spaghetti
code.

.........

feedback is welcome. above all we would like to hear all your weird
and interesting url mapping scheme ideas so we can proof the api
against them.

-igor


--
Erik van Oosten
http://www.day-to-day-stuff.blogspot.com/

Reply via email to