Hi again,

I've been trying to understand the tiles 3 project structure in order to integrate it in the right way. I understand that it's not released nor documented, yet. And it's too soon to ask for support on that, but I'd like to check if I've understood correctly and perhaps to suggest something different.

The current structure revolves around 3 groups of projects:
- tiles-request, including the abstract request model and implementations for jsp, servlet, portlet, freemarker and velocity. - tiles-parent (and tiles-eval) include the engine (tiles-core + tiles-template) and a number of "glue" projects for all implementations around here. - tiles-autotag generates the necessary code to process the taglib in jsp, velocity and freemarker (note that the generated code goes into tiles-parent).

I must say that it's a huge improvement compared to tiles 2.2, but I still find it a bit messy. Perhaps because I don't know it well enough, yet.

But here is how I see it: Tiles is a layout engine, and does nothing by itself. It receives rendering requests from other techonologies, and delegates the rendering to other technologies (sometimes the same). Therefore it requires two groups of adapters: - one for the requests received through taglibs or servlet or direct calls to the container. Those adapters are responsible for converting the user's request into a uniform Request abstraction. - one for the orders sent to the rendering technologies, through the Renderer interface.

With the current layout, Request and Renderer are placed together in the same package when they share the same technology. It took me a while to understand that it's a bridge pattern and the Request and Renderer hierarchies are completely unrelated. But of course I have to admit that people usually use the same technology on the request side and the rendering side (even if I don't), so perhaps it's good for them to have a single jar file.

The autotags are much less clear. For a given techology, say freemarker, we have 4 projects: the "request" described above, the "autotag" (a tag generator), "autotag-runtime" with abstract classes that create the Requests, and a "glue" project in tiles-parent that hosts the generated tags. That's at least one project too many, because you can't possibly use the "glue" and "autotag-runtime" without each other.

Therefore I'd like to suggest the following, for clarity and because it would make it easier to explain in the docs:

tiles-autotag
+- maven-autotag-plugin
+- tiles-autotag-generator (rename for tiles-autotag-core)
+- tiles-autotag-core (rename for tiles-autotag-core-runtime: use the shorter alternative for the runtime libs)
+- tiles-autotag-XYZ-generator (rename for tiles-autotag-XYZ)
+- tiles-autotag-XYZ merging tiles-autotag-XYZ-runtime and tiles-XYZ.

tiles-request
+- tiles-request-api
+- tiles-request-XYZ (basically the same as today without the package 'render')
+- tiles-render-XYZ (when applicable)

tiles-eval
+- tiles-eval-api
+- tiles-el
+- tiles-mvel
+- tiles-ognl

tiles-parent
+- tiles-api
+- tiles-core
+- tiles-template
+- tiles-compat
+- tiles-extra

Eventually the tiles-request-XYZ could be merged with tiles-autotag-XYZ when it's small enough; there's no request coming to tiles from a JSP except from a taglib.

Of course I realize I'm the newcomer here; you guys have probably discussed all of this already, and perhaps reached similar conclusions (or not...). But it helps me understanding how things are, and well, perhaps I can help, who know?

What do you think?

Nick

Reply via email to