非専門家の観点から、私がWFを主張する2つのことがあります。1つはワークフロープラットフォームに固有のものであり、もう1つはおそらくより便利なものです。
便利な機能は、アクティビティを構成する新しい方法を作成する機能です。命令型プログラミングでは、構成プリミティブの限られたレパートリーのみが提供されます。基本的には、シーケンス、if-else、およびループです。WFを使用すると、インターリーブ実行、並列実行、単純小選挙区制などの独自の合成演算子を構築できます。もちろん、ステートマシンの高度な合成メカニズムが組み込まれています。
これらの演算子はすべてC#のような命令型言語で作成できるため、これは便利な機能だと思います。実際、これがWF演算子の作成方法です。ただし、WFを使用すると、カスタムコンポジションの使用と読み取りが簡単になりますが、C#では、ラムダ式が大量に発生します。したがって、複雑なオーケストレーション要件がある場合、つまり、アクティビティを組み合わせる方法がシーケンス、if-else、およびループよりも複雑な場合、WFによってプログラムの表現と理解が容易になる可能性があります。
ユニークな特徴は耐久性です。これは、Shukla and Schmidtの本が始まり、そして戻ってくるところです。C#またはVBで記述された命令型プログラムは、運が良ければ数時間、数日、数週間、場合によっては数か月間実行できます...しかし、最終的にIISはアプリプールを循環させるか、管理者は最新のセキュリティ更新プログラムをインストールしたいと考えます。 、または誰かが電源コードにつまずく予定です。それでは、あなたのプログラムはどのように覚えていますか? Eメール"?
従来の命令型プログラムでは、プロセスが終了すると、実行状態もそれに伴って終了します。新しいプロセスを開始できますが、プログラムの最初から開始されます。もちろん、データベースを作成し、それを使用して「発注書を取得」や「クレジット承認を取得」などのフラグを保存できます。ただし、状態を保存してクエリを実行し、その状態に応じてプログラムの適切なポイントに戻るには、アプリケーション固有のコードを作成する必要があります。また、実行時間の長いアプリケーションごとに、新しいデータベースと新しい保存/復元/ジャンプロジックを設計する必要があります。
耐久性のあるワークフローとは、この問題に取り組むことです。プログラムをアクティビティのワークフローとして作成する場合、WFは、実行フローのどこにあるかを含め、その状態を維持します。プログラムを実行しているマシンが発火してデータセンターを焼き尽くす可能性がありますが、銀行からの応答が来ると、WFは他のデータセンターでプログラムをウェイクアップし、適切な場所で適切な場所で実行を開始しますデータ。
それは私にとってWFの「強力なケース」です。多くの場合、それは必要ありません。アプリケーションは十分に短命であるため、障害は重大な懸念事項ではなく、最初から再起動することが実行可能な回復戦略です。ただし、応答に数時間かかる可能性のある外部システムを調整している場合や、応答に数日かかる場合がある人間が関与するビジネスプロセスなど、長期間使用できるアプリケーションの場合、耐久性がWFのキラー機能になる可能性があります。
免責事項:私はWFプログラマーではなく、実際のWFシステムを構築したことはありません。私はBizTalkのバックグラウンドから、そしてWFについて読んだことからこれに来ているので、この評価はちょっと理論的です。それがすべて同じように役立つことを願っています!