Enums中的业务逻辑?

时间:2010-07-30 17:15:58

标签: java enums business-logic

在Enums中放置任何类型的业务逻辑是否被视为良好做法?不是真正强烈的逻辑,而是更像是方便实用的方法。例如:

public enum OrderStatus {

 OPEN, OPEN_WITH_RESTRICTIONS, OPEN_TEMPORARY, CLOSED;


 public static boolean isOpenStatus(OrderStatus sts) {
      return sts == OPEN || sts == OPEN_WITH_RESTRICTIONS || sts == OPEN_TEMPORARY;
 }

}

6 个答案:

答案 0 :(得分:16)

恕我直言,这使您能够将相关信息放在可能被使用和搜索的位置。枚举没有理由不是实际责任的实际课程。

如果这允许您编写更简单的代码和SOLID代码,为什么不呢?

答案 1 :(得分:10)

是的,我认为这是一个好主意。但是,我认为可以使用实例方法更清晰地实现它:

public enum OrderStatus {

 OPEN, OPEN_WITH_RESTRICTIONS, OPEN_TEMPORARY, 
 CLOSED {
   @Override isOpen() { return false; }
 };

 public boolean isOpen()
 { 
   return true;
 }
}

答案 2 :(得分:5)

我经常使用Enums作为单例实例。因此,它们几乎只包含业务逻辑。作为有意扩展Enum的类,它们甚至可以实现接口。

如果它符合枚举值,我只考虑使用Enums,即商务逻辑与实例紧密结合。

答案 3 :(得分:2)

由于你的例子中的逻辑与枚举值的(名称)紧密相关,我想不出更好的地方。

答案 4 :(得分:1)

枚举主要工作是使用程序员友好名称强制执行一组特定值。如果您的业务逻辑可以表示为一组静态值,那么Enums是一个很好的方法。不要忘记,在Java中,您可以创建容量超过one value的枚举类,如果您有一堆相关值,则非常有用。

答案 5 :(得分:0)

对于上述简单的商务逻辑来说,这是可以的,但是当涉及到扩展枚举的点时,我遇到了一个问题,这是不可能的。例如,我们在枚举中存储了其他数据,后来又想对许多不同枚举的值进行反向映射,这对于标准类来说很容易实现,但对于枚举则不可能(没有代码重复)。
标准类可以执行相同的操作(在switch语句中使用除外),并且更加灵活和可靠。如果枚举可能变得更复杂,则最好使用类,否则在我看来,将枚举与简单逻辑结合使用会很好