6

「ワークフローマージ」の設計についてお聞きしたいのですが。互いにあまり似ていないワークフローがいくつかあります。ただし、それらを組み合わせて、わずかに変更したい場合があります。例を挙げましょう:

ワークフロー1-旅行

A1(バッグを詰める)-> A2(家を出る)-> A3(バスに乗る)-> A4 .. ..

ワークフロー2-毎日の植物の散水

B1(水をオンにする)-> B2(家を出る)-> B3(植物に水をやる)-> B4(家に入る)-> B5(水をオフにする)

日曜日に旅行に行きたいので、植物にも水をやる必要があります。だから私はA1->B1からB5->A2...のようなものを作りたいです。また、友達に水やりを終了するように指示する可能性もあります。これは、A1->B1からB2->C1(タスクを友達に渡す)-> A3 ...のようになります。ご覧のとおり、フロー簡単です-フォークや結合はなく、そのような機能は必要ありません。必要なのは、コマンドの線形リストを作成して、それらを簡単にマージできるようにすることです。現時点では、コードのすべてのフラグメントはJavaメソッドです(そして、それらをアトミックフローのようなものにしたいと思います)。

私のアプローチの主な目標は、同じコードを何度も入力しないようにすることです。フローには数百のステップが含まれる場合があります。フローAの実行のようなステートメントを作成したいのですが、A2とA3を実行する代わりに、B2からB6を実行し、Aを続行します。

私は2つの主要な質問があります:

  • すでにこれをサポートしているフレームワークはありますか?もしあれば、それは私の目的には複雑すぎませんか?
  • そうでない場合、そのようなことを実装するための最良の方法は何でしょうか?

注:私の質問について不明確な点を具体的に教えてください。

4

4 に答える 4

1

... またはCommand Patternを実装します。フレームワークがなくても非常に簡単です。

于 2012-10-12T09:05:28.737 に答える
1

個人的には、特定のフレームワークを使用せずに要件を実装できると感じています。次のようにアプリケーションを設計できます。

  1. TaskPerformer : performTask という名前のメソッドを持つインターフェイス。実行するタスクを表します。

  2. BagPackTask : TaskPerformer を実装する具象クラス。また、バッグを梱包するためのコードを含む performTask メソッドも定義します。

  3. WaterPlantsTask : TaskPerformer を実装する別の具象クラス。植物に水をやるコードを含む performTask メソッドも定義します。同様に、Taskperformer を実装し、performTask メソッドを使用してタスクの動作を定義する、タスクごとに 1 つのクラスがあります。

  4. ワークフロー : 2 つ以上のタスクを実行するために使用され、既存のタスクを組み合わせて一致させることができるクラス。クラスには TaskPerformer のリストが含まれ、このクラスのコンストラクターには、実行するタスクを要求する List パラメーターがあります。このクラスには、リストを反復処理し、リスト内の各要素の performTask メソッドを呼び出す executeWorkflow メソッドが含まれます。つまり、このクラスは、executeWorkflow メソッドを使用して、インスタンス化中にコンストラクターに渡されたすべてのタスクを実行するために使用できます。リストに要素を挿入する順序は、タスクが実行される順序であることに注意してください。

このアプローチを使用すると、実行するタスクを決定するために if-else 条件を設定する必要がなくなります。TaskPerformer の実装は、必要な数のワークフロー インスタンスで再利用できます。非常にクリーンなデザインが得られます。この設計で問題が解決すると思うので、説明が必要な場合はお知らせください。回答を受け入れる前に、すべての疑問を明確にすることをお勧めします:)

于 2012-10-11T19:32:05.253 に答える
0

Spring Batchは非常に簡単に起動して実行でき、任意の順序でタスクを実行するジョブを送信できます。開始点として、それがニーズを満たしているかどうかを確認することをお勧めします。あなたの場合、セットアップのオーバーヘッドを避けるために、HSQLDB などのメモリ内データベースで実行することをお勧めします。ジョブの結果はいつでもログ ファイルに記録できます。

おそらく最も成熟したエンタープライズ ワークフロー エンジンはJBPMですが、これは実行する必要があることを考えると少し重いようです。

于 2012-10-11T12:50:24.290 に答える