32

私は、もっと単純なものを優先してWindowsWFを捨てるべきだと考え始めています。ワークフローの実行を長期間一時停止して、後で復元する必要はありません。ただし、基本的なサスペンド/レジューム/アボート(シリアル化なし)を備えた単純なステートマシンフレームワークが必要です。

Google Codeからステートレスフレームワークをダウンロードして試してみますが、他の.NETプログラマーが何を使用しているのか聞いてみたいと思います。

EDIT Statelessは実装が本当に簡単に思えますが、それがキャンディーマシンにとって正しいことかどうか疑問に思います。自動化では、ステートマシンの使用方法について常に矛盾を感じています。私は「ステートマシン」という用語を使用しますが、フローチャートのように使用するため、大まかに使用します。状態を使用してマシンの現在のモードを表す代わりに、それを使用して関数を実行します。したがって、この場合のステートレスでは、キャンディーマシンのコントローラーで関数を呼び出すためのメカニズムとして、ある状態から次の状態への遷移を実際に使用します。考え?

4

1 に答える 1

40

これに取り組みながら、見つけたもののいくつかをリストしようと思います。ほとんどの場合、分析の観点からは少し表面的なものになる可能性があります (特に、私は両方のフレームワークに慣れていないため)。

ステートレス

長所

  • オープンソース
  • 構文的に簡潔で読みやすい
  • Googleコードのmercurialレポのかなり良い例
  • ステートレスを使用して、UML 状態図をコードにすばやく変換できます。
  • 状態の維持は非常に簡単です -- 簡単に追加および削除できます。拡張メソッドを使用すると、個別の行で状態を構成できるため、使用したくないトリガーやアクションをコメントアウトできます。
  • ステート マシンとの間でデータをやり取りするのは簡単で、コード ビハインドで好きなように行うことができます。
  • 同様に、ステート マシンはさまざまな方法で GUI を更新できます。現在、インターフェイスを介してデータを変更しており、GUI はタイマーを使用してその要素を更新しています。おそらく BackgroundWorker を使用してこれを行うこともできます。
  • 実行中、一時停止、中止、アイドルなどのさまざまな状態を管理する必要がある GUI を処理するためにサブステートを使い始めたところです。ユーザーはさまざまな方法でシステムを一時停止できるため、一時停止状態にはサブステートがありますが、再開トリガーは一時停止された方法に固有です。軽量のステート マシン フレームワークを使用して、GUI の有効化/無効化とツールチップを管理できることが気に入っています。

短所

  • 一時停止、再開、中止のための組み込みメカニズムはありません
  • プロジェクトをサポートする開発者は 1 人だけです。ただし、最近遭遇した問題については支援を受けました。
  • 注意しないと誤用の可能性があります。最初の試行でステート マシン フレームワークを不適切に実装しました。それは何ヶ月もうまく機能しましたが、非常に長時間実行されるプロセスを実行したときに、最終的には機能しなくなりました。状態ハンドラーがスタックアップする原因となっていて、スタック オーバーフロー状態が発生していたことが判明しました。

Windows ワークフロー ファンデーション

長所

  • ワークフローを設計するためのグラフィカルなアプローチ
  • ワークフローの永続化、一時停止、再開、中止をサポート
  • MSにはおそらくこれをサポートするためのプログラマーの大規模なチームがあります
  • GUIにより、アクティビティの無効化/再有効化が非常に簡単になります

短所

  • ワークフローを設計するためのグラフィカルなアプローチは、これがかなり複雑であるという事実を隠しています
  • 持続性を使用して一時停止/再開/中止を行うには、「持続性サービス」をインストールしてセットアップする必要があります。SQL データベースを正常にセットアップできますが、実行時に理解できないエラーが大量に発生します。
  • MS からのものであるため、非常に長く存在するか、完全に削除されるかはわかりません。
  • コードビハインドまたは FaultHandler を使用できるため、エラー処理は少し奇妙です
  • WF からメイン アプリにデータを渡すのは複雑で、WCF のようなものが必要です (別のテクノロジについては、今は十分に学習する時間がありません)、または ExternalDataExchange インターフェイスを使用する必要があります。
于 2010-03-02T18:04:41.800 に答える