Stephen Smith wrote:

05. Re-naming classes and methods. I think that names should be re-evaluated to make sure that they still make sense in the new code. For example, with the singletons we have TruePredicate.getInstance(), but this becomes relatively silly when we have static imports. There's only one getInstance() method that we can import per class. Therefore it should be TruePredicate.getTruePredicate(), which will be simplified to the shorter getTruePredicate() in the code.

That's an interesting idea, Stephen - I haven't considered the impact of JSE5 static imports on the Singleton design pattern before. However, I'd reserve a +1 on it solely because I'm a little worried as to how far we're going to open this "reboot" can of worms.
I say go the whole way - however, in voting for 01. (deprecated methods), I would also be inclined to deprecate the old-standard way of doing things. If we go the way of a renamed package, we can always have a compatibility jar that will map the old to the new stuff. However, I really like the namespace - I'd propose that we keep the package name the same, and add a org.apache.commons.collections-compat package for transitional utilisation. That's pretty easy to do with a find replace in source (we've broken binary compatibility anyhow).

Otherwise we could make it a two-stage/option release. There will be a compatibility migration release (throughout development), which sets the new direction, but retains old (and now-deprecated) methods, and then once that's stable, we can remove all the old-standard methods completely from the trunk and release that as well - both would be maintained in parrallel. Even better would be to have an automated build that is able to do this. The compatibility build would only be for the first version.

Both options have their ugliness and pain, but I think it's short term pain for long term gain. How much of a better gift can we give future developers than a beautiful, well crafted api? In my projects, order of import is (log4j, collections, easymock, joda-time). Collections is a biggie, and probably gets used (or at least should be) in well over half of all projects.
For example. if we're really going to push the boat out on this, what about hiding public constructors in static utility classes? It's the sort of thing CheckStyle whines about, and normally with good reason. I've never understood why CollectionUtils#CollectionUtils is public, even with a comment along the lines of "should not normally be used". If every method is static (and the class is therefore potentially finalised), when would it ever be used?
Hah - snap! I was just about to come back and talk about checkstyle in another thread - is there an apache checkstyle convention that we are able to use for this to ensure the code is properly formatted? I support the above, but would also prefer to go a bit further (e.g. if statements [that represent exceptional conditions] with return statements should not be followed with an else, as the "else" should really be the normal flow of the method).


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to