2016-10-25 84 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 - 實施

叫的這部分