-1 - I agree with Andy and Max for the reasons Matthias stated. Classes in the Trinidad impl are not to be used outside of trinidad itself. Only items in the API need to worry about extension outside of the renderkit. As such, I think leaving things status quo is probably prudent. Because this *IS* an OpenSource project, I suppose the community (or interested parties) could propose adding some of these components to the API, but I wholeheartedly disagree that we need to change the impl because someone wants to extend it.

Andrew Robinson wrote:
I wasn't suggesting blind removal. IMO final should rarely ever be
used, for open source it almost never does anyone any good. I would
suggest a renderer-by-renderer approach though, not method-by-method
as that would take too long to file that many bugs.

Right now Trinidad and facelets are by far the most inflexible open
source code I have worked with. Both over-use final and both assume
that out-of-the box behavior is enough fore everyone's needs. For
Trinidad renderers, many only expose encodeAll as protected then do
most of the work in private methods. As a result a person needing to
customize a renderer has to use copy & paste (generate an entirely new
renderer using the source of the core one) which really sucks for
maintenance.

-Andrew

On Thu, Apr 10, 2008 at 1:48 PM, Andy Schwartz
<[EMAIL PROTECTED]> wrote:
On Thu, Apr 10, 2008 at 1:36 PM, Andrew Robinson
 <[EMAIL PROTECTED]> wrote:
 > +1 for:
 >  - removing most final modifiers
 >  - going from private to protected on most renderer methods

 Not sure how much my opinion counts, since I am a new face around
 here, but I am -1 on blindly removing most final modifiers, or
 promoting most private methods to protected.  Methods may have been
 intentionally marked as final by the Renderer author, eg. to enforce
 the fact that the method is itself a convenience for some other method
 which provides the actual implementation.  And many if not most of the
 private methods are not necessarily good additions to the protected
 API, since they were not designed with extensibility in mind.

 I understand the desire for more flexibility, so if the community
 feels this is important, then let's solve the problem.  However, I
 don't think that the way to achieve this goal is by sacrificing basic
 design principles.  If we want better protected APIs, then let's work
 on adding them - arbitrarily removing most final/private modifiers
 isn't the way to get there.

 BTW, (referring back to early comments on this thread) I don't see how
 this is an open vs. closed source issue.  The same API design
 principles apply to both cases.


 >  - and adding more customization hooks in the renderers

 Now this sounds like a better idea.  In some cases this may mean
 making existing final/private  methods non-final/protected, but we
 should put some thought into which cases require this rather than
 doing this in an arbitrary manner.

 Andy


Reply via email to