Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 枚举中的业务逻辑?_Java_Enums_Business Logic - Fatal编程技术网

Java 枚举中的业务逻辑?

Java 枚举中的业务逻辑?,java,enums,business-logic,Java,Enums,Business Logic,在enum中放置任何类型的业务逻辑是否被认为是良好的实践?不是真正的强烈逻辑,但更像是方便实用的方法。例如: public enum OrderStatus { OPEN, OPEN_WITH_RESTRICTIONS, OPEN_TEMPORARY, CLOSED; public static boolean isOpenStatus(OrderStatus sts) { return sts == OPEN || sts == OPEN_WITH_RESTRICTION

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

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;
 }

}

嗯,这使您能够将相关信息放在可能被使用和搜索的地方。枚举没有理由不是具有实际责任的实际类


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

因为您的示例中的逻辑与枚举值(名称)紧密相连,我想不出更好的位置来放置它。

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


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

< P>枚举主要任务是执行一组特定的具有程序员友好名称的值。如果可以将业务逻辑表示为一组静态值,那么枚举是一种很好的方法。不要忘记,在Java中,您可以创建包含超过个的枚举类,如果您有一组相关的值,那么这些类将非常有用。

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

public enum OrderStatus {

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

 public boolean isOpen()
 { 
   return true;
 }
}

对于上面的简单业务逻辑,这是可以的,但是当扩展枚举时,我遇到了一个问题,这是不可能的。例如,我们在枚举中存储了额外的数据,后来希望获得许多不同枚举的值的反向映射,这对于标准类来说很容易,但是对于枚举(没有代码重复)来说是不可能的。

标准类也可以做同样的事情(除了在switch语句中使用),并且更加灵活和可靠。如果枚举可能会得到更复杂的逻辑,那么最好使用类,否则在我看来,使用带有简单逻辑的枚举是很好的

现在,只要我们能在C#land中这样做:(“枚举没有理由不是实际负责的实际类。”:在Java中,枚举是实际的类;)@Brian-我是这么说的,应该这样对待它们(与C的枚举相反),我希望这就是答案。我以前听说过枚举应该只充当常量,本质上是哑对象。sts不是吗!=CLOSED可能更简单。+1对于使用枚举编写单例,应该有更多的人使用该方法。@Tom Hawtin一般来说,单例没有错。它们可以而且使用得不好,但这并不意味着它是一种糟糕的设计模式。单例可以像其他任何东西一样被滥用,但如果使用正确,它们肯定是有用的。甚至Josh Bloch也建议为此使用Enum,b/c这样您就不必担心手动滚动单例类的序列化和其他经常遗漏的细节