On May 5, 2009, at 11:15 PM, Jörg Schaible wrote:

James Carman wrote at Mittwoch, 6. Mai 2009 03:12:

On Tue, May 5, 2009 at 6:36 PM, Matt Benson <gudnabr...@yahoo.com> wrote:

I feel differently--how many times do we need to duplicate code that does the same damned thing amongst the various components? For example, we've now added MethodUtils to [lang], but [collections] has its own set of code supporting InvokerTransformer. [functor] doesn't have an analogous function because it seemed to me silly to keep rewriting and/or copying the necessary code. IMHO we of the Commons need to establish an approach for "mixin" components, optional dependencies, svn externals, something,
to avoid doing this again and again and again.

I'm with Matt on this one. I really hate that Collections has its own
functors and I really hate having to copy code from one place to
another all the time.

I'd like to be able to keep my own little library of nifty functors
and use those throughout my application in different contexts.  Right
now, I have to use adapters all the time to go between one or the
other (functors vs. collections).  Yuck!  I've even gone as far as
creating little frameworky type classes that take these functor
classes (TransformerListCellRenderer and TransformerTreeCellRenderer
come to mind).

Perhaps we could split functors into an API jar and a utils or
algorithms jar? The API would have all the main interfaces in it (the stuff in org.apache.commons.functor). Collections could depend on the
API and if folks want to use stuff from functor to do what they want,
then so be it.  If not, oh well.  The API itself really can't evolve
that much. Those interfaces have been the same for a long time (other
than the generics)

Maybe it's also time to think about more fine grained artifacts. With Maven
the dependency management is no longer that worse. We could have

 collections-x.y.jar
 collections-functor-x.y.jar

with the latter providing the stuff of collections depending on functor.
This will not work for all kind dependencies between the commons stuff
(e.g. helper classes from commons-io), but there are some components now, where an currently optional dep simply means additional functionality (e.g.
in configuration or vfs).

Opinions?


Well, it should be obvious that this seeming aversion to dependencies isn't something I consider part of a good design. I've added several to both configuration and vfs, all of which - as you pointed out - are optional. I really don't understand the benefit of having mulitple copies of code in various projects that will eventually get out of synch vs just sharing one copy. I thought that was what commons was supposed to be all about.

OTOH, commons components should be fairly small so the number of dependencies shouldn't get too out of hand.

Ralph


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

Reply via email to