2016-10-25 4 views
1

私は同じ問題に直面していることに取り組んできた2番目のプロジェクトです。ビジネスオブジェクトの状態の進行を正しく扱うにはどうすればよいですか?これまでのところ、我々は基本的なスイッチ/ケースを使用します。オペレーションワークフローエンジン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に統合さ

この質問を閉じるには10

は、https://github.com/spring-projects/spring-statemachineのように見えるこのリファクタリングの溶液

答えて

0

1つのオプションは、ステータスのサブクラスに各ケースからの操作だけでなく、pushTransferToStatusを移動するだろうさ。あなたはおそらく、各Status -Implementation

によって呼び出される可能性抽象クラス Status、このの一部を実装することができ pushTransferToStatusの性質によって

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

:あなたは、それぞれの場合に1つのサブクラスが必要になり