在值对象中存储常量

时间:2015-01-14 19:53:15

标签: java oop javabeans

我还有一个以下形式的VO对象

public class DummyVO {
    private int id;
    private String message;
    //getters and setters.

    //set of constants that describe the DummyVO. 
    public static final String MESSAGE_CONST1 = "A-> Const value for message";
    public static final String MESSAGE_CONST2 = "B-> Const value for message";
}

我想知道上述是否是好的做法,或者将常量移到一个单独的类中是否有意义。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

除了你可以说

之外,没有明确的答案
  • JDK在接口和类中有常量。
  • 通常避免创建一个只保留常量的接口或类恕我直言。
  

此处没有设定标准或OOP指南吗?

无AFAIK。指南应该是以您认为合理的方式布置课程。

  公共类TestVO {

测试值对象通常放在测试区域中。值得注意的是

  • 测试代码不一定是生产代码的最佳实践。有时候做出意想不到的事情会有很好的考验。
  • 数据驱动测试的结构通常与常规代码不同。即我怀疑你根本不需要定义这些常数,只需在你的测试中使用它们。

答案 1 :(得分:3)

  

我想知道上述是否是良好做法或是否有效   感觉将常量移动到一个单独的类

这取决于常量是否有意义以保持接近该类。

例如,以下可以被认为有意义:

public class Product{
   private int id;
   private String category = DEFAULT_PRODUCT_CATEGORY;

   // setters and getters, constructors and what not

  public static final String DEFAULT_PRODUCT_CATEGORY = "Uncategorized";
}

在此假设示例中,常量(DEFAULT_PRODUCT_CATEGORY)与Product类中的category字段紧密相关。因此,在该课程中拥有该常量可能是有意义的。也可以说我们需要一个包含该常量的Category类(或枚举)。

另一方面,这没有意义:

public class Product{
   private int id;

   // setters and getters, constructors and what not

  public static final String ERROR_MESSAGE = "some error";
  public static final float PI_APPROXIMATION = 3.14159;
}

在这个(尽管是夸大的)示例中,一个常量(ERROR_MESSAGE)过于通用,它并不特定于Product类可能表示的内容。第二个常数(PI_APPROXIMATION)更糟糕,因为没有理由有这样的事情。

因此,除了那些回答以下问题的指南之外,没有其他指南:将它放在那里是否有意义?

常量意味着为某人或某事代表。因此,这些常量需要以一种有意义的方式与使用它们的事物分组。类和接口不仅仅是我们向它们抛出的开放框。

软件工程的基本挑战在于设计有意义的事物。有意义的是针对问题和手头的情况。