I thought I'd weigh in here on the positives and negatives of Tapestry.

Don't expect me to go gushing on about community and the generosity of
the committers and all that; I stay pretty well focused on the
technology.

Beautiful Things In Tapestry

* Live Class Reloading

Can't live without it. Encourages an exploratory style that's very agile.

Negatives: everyone wants it for non-component classes. ClassLoader
issues passing components "outside the box". Doesn't pick up new files
perfectly, just changed.

* Exception Reporting

Best of breed, nothing rivals it.  Come on, we color code the stack
frames and hide the ones that are uninteresting!

Negatives: Exceptions can get nested very deeply.

* Templates

Tapestry templates are simple and concise. They are readable. Their
structure on the server is very close
to the final output on the client. It's very easy to move back and
forth, and you don't have the kind of visual impedance
and clutter that you see in JSPs and other templating systems.

Negatives: A couple too many ways to do things (three different ways
for an element to be a component). XML causes grief if including HTML
entities without a DOCTYPE. A few minor ambiguities (mostly about
doctypes and namespaces). Should never have allowed page templates in
the context folder.

* Rendering

Tapestry isn't about rendering character data; rendering at all steps
is a process by which objects (ultimately parsed from XML templates)
render as ... objects (the DOM) and it is the DOM that's rendered as a
character stream. Post-processing of the DOM simplifies everything
(Tapestry 5 doesn't need Shell and Body components, like T4).
Rendering is not tail recursive and its very easy to manipulate the
render order to accomplish very dynamic effects within Tapestry's
static structure dictum.

Negatives: more memory intensive, and slower to first-byte (on the client).

* Naming Conventions, Annotations, Parameters

Everything works together so that Tapestry can "do the magic". Code is
concise, Tapestry fills in around the edges. Very smart defaults (that
is, active code defaults rather that simply declarative).

Negatives: Many are more comfortable extending classes or implementing
interfaces. Documentation gets tricky with th wealth of options and
approaches. Some annotations have odd names. Annotations should have
been divided up more clearly to indicate which apply to POJOs and
which are only useful with components.

* Performance

Tapestry is really fast!  Especially in 5.1 where some effort was made
to speed it up and streamline it. Lots of room for caching and
optimizations.

Negatives: JSPs can be faster sometimes.

* Service Configurations and Module Autoloading

Allows Tapestry to be extended just by "dropping in a JAR". Modules
are loaded, services provided, contributions contributed, everything
just wires itself together.

Negatives: Modules can only be loaded at startup. Configurations can
be tricky to master. Lots of modules makes it harder to understand how
everything fits together.

* TypeCoercer

Magic that lets data flow from component to component, efficiently and
without regards to type. For example, lets you pass a List to a Grid
component, even though the source parameter is type GridDataSource ...
the List is coerced.  And its extensible, central to configuration,
quite efficient.

Negatives: It's so central that naive contributions (to extend it) too
often result in Tapestry IoC startup failures that are hard to
diagnose.

* Friendly URLs

Tapestry built-in URL generation creates sensible rest-like URLs.

Negatives: People want absolute control over URLs; 5.1 provides this,
but the jury is still out.

* Public vs. Internal

T5 does what prior Tapestry did wrong: clear separation between
internal code (subject to change at any time) and public APIs.

Negatives: people still need to use internals sometimes and face
difficulties moving up from 5.0 to 5.1.

* Extensibility

Every aspect of Tapestry can be overridden, extended, decorated,
advised, improved, replaced, etc. The term "seam" has come into vogue
as representing a location where code can be extended ... Tapestry is
pretty much nothing but seams.

Negatives: Almost two hundred services and all those configurations
and contributions make it hard to find where to apply a change to
reach a desired effect.


.... I think that are some of the main ones.

-- 
Howard M. Lewis Ship

Creator of Apache Tapestry
Director of Open Source Technology at Formos

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to