Enums中的业务逻辑?

sma*_*sma 7 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;
 }

}
Run Code Online (Sandbox Code Playgroud)

aby*_*byx 18

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

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


小智 10

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

public enum OrderStatus {

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

 public boolean isOpen()
 { 
   return true;
 }
}
Run Code Online (Sandbox Code Playgroud)


b_e*_*erb 5

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

我只考虑使用枚举,如果它适合枚举值,即商务逻辑与实例紧密耦合.

  • 单身人士可以像其他任何东西一样被滥用,但在正确使用时肯定是有用的.甚至Josh Bloch建议使用枚举用于此目的,然后你不必担心序列化和其他常见的手动单例类细节 (3认同)
  • 使用枚举编写单例的+1,更多的人应该使用该方法. (2认同)
  • @Tom Hawtin一般来说单身人士没什么不对.它们可以并且使用得很差,但这并不意味着它是一种糟糕的设计模式. (2认同)