Allow invocation of public methods in non-public classes
--------------------------------------------------------
Key: VELOCITY-582
URL: https://issues.apache.org/jira/browse/VELOCITY-582
Project: Velocity
Issue Type: Improvement
Components: Engine
Affects Versions: 1.5
Environment: Any
Reporter: Andrew Swan
I was tempted to log this as a bug, however according to this comment it's a
feature:
https://issues.apache.org/jira/browse/VELOCITY-214?focusedCommentId=12323932#action_12323932
In any case, Velocity's requirement for all called methods to be in public
classes forces developers to violate proper OO encapsulation by exposing
implementation details. For example, consider this interface:
public interface Foo {
int getFooCount();
}
And a non-public implementation:
class FooImpl implements Foo {
public int getFooCount() {
return 0;
}
}
And a provider of Foo instances (in the same package as FooImpl):
public class FooService {
public Foo getFoo() {
return new FooImpl(); // only this class should know what type of Foo
is being created
}
}
This is good OO code as it stands, however Velocity forces us to make FooImpl a
public class. Although this allows Velocity to work properly, it also allows
all other classes in the application to access the FooImpl class for
themselves, creating the risk of excessive coupling and diluting the benefit of
using interfaces in the first place.
This wouldn't be so bad in a new project, but in my existing Velocity-based
enterprise application of over 3000 classes, I can't be sure which of these can
be properly non-public and which have to be made public just for Velocity's
sake. In other words, there's no way to work out which ones might be (or might
end up being) invoked by a template (particularly given that many of them are
properly hidden behind interfaces). This means I'm not at liberty to refactor
my code in the interests of proper encapsulation, because I run the risk of
breaking a Velocity template. To me this is a big cross against Velocity, and
if we weren't already using it heavily, I'd switch to an alternative templating
tool. So any priority or importance that can be assigned to this issue would be
greatly appreciated.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]