Dibyendu Majumdar wrote:

Modules that need to have their own set of "constants", can initialize them as follows:

static final String A_CONSTANT = Component.get("namespace", "my.key");

The advantage of this approach over the current approach is that:

a) It maintains all the objectives of the current approach. Data can be stored in a shared location, and therefore, we can avoid problems such as use of duplicate values. b) It ensures efficient access by allowing modules to continue using constants for such values. c) It makes the system more modular, as each module references only those constants that it defines itself - there is no need for a shared interface that defines all constants.

I don't see any particular disadvantage in taking this approach.

I see a couple:

1) To me this seems to be making something simple much more complex for no real benefit. It's good if open source code is easy to understand and follows existing practices. Java defines constants as static final fields in interfaces or classes, e.g.

  public static final String JMX = "derby.system.jmx";


2) Such constants would probably no-longer be in-lined by the java compiler, leading to potentially slower code as a field lookup is needed.

I guess I don't quite see what the issue is with a "shared interface that defines all [related] constants." These are compile time only artifacts as they only contain literal constants.

I agree that in some cases it may make sense to move specific classes from a central reference area to a more specific are, e.g. jdbc constants could move to o.a.d.iapi.jdbc, but doing so is not improving the modularity of Derby, it's just a preference of location.

Dan.

Reply via email to