声明属于不同层的常量是一个很好的做法,例如控制器,服务,DAO等在单个界面内使用多个接口按照它们所属的层来隔离常量,例如如下所示:
public interface TestConstants
{
interface UIConstants
{
public static String FIRST_UI_CONSTANT = "FIRST";
public static String SECOND_UI_CONSTANT = "SECOND";
}
interface ServiceConstants
{
public static String FIRST_SVC_CONSTANT = "FIRST";
public static String SECOND_SVC_CONSTANT = "SECOND";
}
interface DAOConstants
{
public static String FIRST_DAO_CONSTANT = "FIRST";
public static String SECOND_DAO_CONSTANT = "SECOND";
}
}
答案 0 :(得分:0)
看起来很漂亮不是吗。一种着色系统结构。
然而它有它的缺点。
将常量复制到导入类中,导入将从.class文件中消失。这意味着当更改接口文件时,编译器可能不会重新编译导入类(编译器的愚蠢错误),并使用旧的常量值。现在不会经常更改常量值,并且可以轻松地手动调用“干净项目”。
然后这个界面可能经常被改变,因为它结合了几个方面。这是不好的风格:太多不需要的耦合。更多版本控制合并,需要更频繁的vcs更新,更多重新编译。
最后,界面使得使用常量很有吸引力。常量不是面向对象的(枚举可以是OO)。拥有许多条件案例分支是一个不好的迹象。架构应该是更多的建模。常量甚至不允许模块化可见性。此外,像int和String这样的原始类型有时最好包装在它们自己的值类中(计算,验证,规范化)。
对于局部常数来说,可以说很多,一种不重复自己的支持,最小的模块化。
总而言之,拥有多个接口,就像命名空间一样,比混合常量用于不同目的要好得多。您应该介绍并传达一致的用法。
具有冗余名称的示例(以常量名称重复的接口名称)将用于样式:
class C implements TestConstants.UIConstants;
... FIRST_UI_CONSTANT
我个人更喜欢
class C implements TestConstants;
... UIConstants.FIRST
上面仍然是一个更好的枚举。