I know your example is a simple case, but, aren't these equivalent?

StringUtils.isNotEmpty(foo)

foo!=null && !"".equals(foo)

Is there some consideration that a method such as "isNotEmpty" is actually a premature over-optimization?

Of course, methods like these are very beneficial when you have languages that restrict or only implement a subset of Java's syntax or capability (such as EL or Velocity etc). But I do agree that we should watch out for small utility methods such as this that could be expressed in about the same amount of local code. We should definitely avoid coupling just to reuse such a method.

-Mark

Stephen Colebourne wrote:
The phrase 'cut and pasted' is liable to immediate negative reaction. Try
the phrase 'should be coupled'.

The argument I put forward is that we should not couple two classes together
unecessarily just as we should not couple two jar files together. Every
connection made has implications. The positive side effect of reduced
coupling is ease of copy elsewhere.

The particular case, Validate, struck me as a class that has no need to be
coupled to any other. However others have argued that it should to save on
maintainance or code duplication. I argue that these are poor reasons to
introduce the coupling.

What has not been argued is the case for the coupling
_based_on_what_the_methods_do_. Validate.isNotEmpty(String) validates that a
string is not empty. StringUtils.isNotEmpty() tests whether a string is not
empty. There is actually a legitimate case for coupling here if the aim is
to define validate as being a wrapper around StringUtils adding error
message functionality. (Note I only realised this last night ;-)

As a counter-example, consider Enum in the enums package which uses
StringUtils to check for non null and non empty string names. Here, Enum
wants non-null and non-empty names. This happens to be the same code as in
StringUtils, but thats a poor reason to couple.

I know.... its a fine line (and maybe I've failed to explain my point even
now). But where possible, I would like to see each package in [lang]
independent, and ideally also the lowest level utilities (ArrayUtils,
StringUtils, WordUtils,...)

Stephen

----- Original Message -----
From: "Henri Yandell" <[EMAIL PROTECTED]>

Changing the subject to kick it more open.

My view is:

(From earlier)
"As a basic rule, I think it's pretty fair to state that package hierarchy
should be obeyed as far as dependencies goes. This means that a package's
classes may not depend on a sibling package, or a child package, but it
may depend on a super-package or classes within the same package. "

Siblings sometimes have to depend on each other, but it's the same type of
dependency as inter-project dependencies.

Allowing for a single class to be copy and pasted is too much though.


I'd be interested in hearing counter-arguments to this viewpoint.

Hen

On Wed, 2 Jun 2004, Tim O'Brien wrote:


-----Original Message-----
From: Stephen Colebourne [mailto:[EMAIL PROTECTED]
Sent: Tuesday, June 01, 2004 5:24 PM
To: Jakarta Commons Developers List
Subject: Re: [lang] Re: cvs commit:
jakarta-commons/lang/src/java/org/apache/commons/lang Validate.java


I'm confused -- why shouldn't a class in [lang] have

dependencies to

other classes in [lang]? Isn't this taking things too far??

Its part of [lang] being broad and shallow. In effect, [lang] is a loose grouping of APIs in a similar vein. As such it should be easily broken into many parts.

ie. a user should be able to come along and take one class (wherever
possible) and paste it into their own CVS/project.

Think of it as a single class jar file. [lang] just provides
a home for it without needing the additional jar packaging.

Stephen

I can't say I agree with this POV, but I do think that it needs a more formal fleshing out than a Re: thread for a CVS commit.

I can see the benefit of reducing dependencies among different projects,

but

I don't see a good rationale for not having Validate use StringUtils

and/or

ArrayUtils. I'm not of the opinion that we should increase the effort

of

maintaining common components because there are people who cut/paste

code

into separate projects.

Respectfully,

Tim






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



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


-- Mark Diggory Software Developer Harvard MIT Data Center http://www.hmdc.harvard.edu

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



Reply via email to