2016-10-25 87 views
1

这是我一直在努力的第二个项目,我面临同样的问题。如何正确处理业务对象状态的进展?到目前为止,我们使用一个基本的开关/箱:操作工作流引擎Java API

public void pushTransferToStatus(Long id, Status status) { 
    // SOME PRECONDITIONS 

    switch (currentStatus) { 
      case OPEN: 
       // DO SOMETHING 
       break; 
      case SAVED: 
       // DO SOMETHING ASYNC 
       break; 
      case VALIDATED: 
       // DO SOMETHING 
       break; 
      case AWAITING_SHIPPING: 
       // DO SOMETHING 
       break; 
      case VERIFIED: 
       // DO SOMETHING 
       break; 
      case CLOSED: 
       // Exit case. 
       break; 
      default: 
       throw new UnsupportedOperationException(); 
     } 
     pushTransferToStatus(id, newStatus); 
} 

这导致意大利面条代码,你可以看到我有一个aync操作执行。我想知道是否有某种高级API可以帮助我处理这个简单的工作流程?

我读了很多关于jBPM的,但我不知道它是否适合你的帮助我的需要...谢谢

到目前为止,我发现这些它们很简单,但将是真棒有一些集成到Eclipse

要关闭这个问题,貌似https://github.com/spring-projects/spring-statemachine是解决重构,这将是对每个病例​​以及pushTransferToStatus移动运营成状态的一个子类的

回答

0

一个选项。 您将需要一个子类,每个案例:

abstract class Status { 
    abstract void apply(Long id); 
} 

class StatusOpen extends Status { 
    void apply(Long id) { 
    // DO SOMETHING 
    } 
} 

... 

public void pushTransferToStatus(Long id, Status status) { 
    // SOME PRECONDITIONS 
    status.apply(id); 
} 

取决于pushTransferToStatus性质,你可能可以实现在抽象类Status,这可能是每个Status - 实施

叫的这部分