类中的多个接口用于常量

时间:2015-11-19 12:26:13

标签: java

声明属于不同层的常量是一个很好的做法,例如控制器,服务,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";
    }
}

1 个答案:

答案 0 :(得分:0)

看起来很漂亮不是吗。一种着色系统结构。

然而它有它的缺点。

  1. 将常量复制到导入类中,导入将从.class文件中消失。这意味着当更改接口文件时,编译器可能不会重新编译导入类(编译器的愚蠢错误),并使用旧的常量值。现在不会经常更改常量值,并且可以轻松地手动调用“干净项目”。

  2. 然后这个界面可能经常被改变,因为它结合了几个方面。这是不好的风格:太多不需要的耦合。更多版本控制合并,需要更频繁的vcs更新,更多重新编译。

  3. 最后,界面使得使用常量很有吸引力。常量不是面向对象的(枚举可以是OO)。拥有许多条件案例分支是一个不好的迹象。架构应该是更多的建模。常量甚至不允许模块化可见性。此外,像int和String这样的原始类型有时最好包装在它们自己的值类中(计算,验证,规范化)。

  4. 对于局部常数来说,可以说很多,一种不重复自己的支持,最小的模块化。

  5. 总而言之,拥有多个接口,就像命名空间一样,比混合常量用于不同目的要好得多。您应该介绍并传达一致的用法。

    具有冗余名称的示例(以常量名称重复的接口名称)将用于样式:

    class C implements TestConstants.UIConstants;
        ... FIRST_UI_CONSTANT
    

    我个人更喜欢

    class C implements TestConstants;
        ... UIConstants.FIRST
    

    上面仍然是一个更好的枚举。