SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Vista時代のプログラミングモデル .NET Framework 3.0入門

WF(Windows Workflow Foundation)チュートリアル 前編

Vista時代のプログラミングモデル .NET Framework 3.0入門 (5)


  • X ポスト
  • このエントリーをはてなブックマークに追加

WFの扱うワークフロー

 WFでは、大きく分けて2種類のワークフローを扱うことができます。

  • シーケンシャルワークフロー
  • ステートマシンワークフロー
シーケンシャルワークフローとステートマシンワークフロー
シーケンシャルワークフローとステートマシンワークフロー

シーケンシャルワークフロー

 シーケンシャルワークフローは、ワークフロー開始からアクティビティを実行していき、最後のアクティビティが完了するまで順に処理が流れていくワークフローです。先に上げた購入申請フローはシーケンシャルワークフローの1つと言えます。

 ただし、シーケンシャルワークフローは厳密な逐次処理ではなく、複数のアクティビティを同時に実行することもできますので、処理の順番が厳密に定められているわけではありません。

ステートマシンワークフロー

 ステートマシンワークフローは、さまざまな状態(ステート)を含んでおり、イベントに応じてステート間を遷移しながら処理を行い、最終状態に遷移していくワークフローです。

 例えば通信販売の管理システムでは、各注文に関して

  • 初期状態(注文前)
  • 注文完了
  • 決済完了
  • 発送完了

 といった状態があるでしょう。それぞれの状態に対して、例えば次のようなイベント・アクションが考えられます。

  • 初期状態:注文イベント→注文感謝メール送付アクション・注文完了へ遷移
  • 注文完了:決済イベント→決済確認メール送付アクション・決済完了へ遷移
  • 注文完了:キャンセルイベント→注文を削除してワークフロー終了
  • 決済完了:商品発送イベント→発送完了へ遷移
  • 発送完了:商品到着イベント→ワークフロー終了

 このように、ステートマシンワークフローはイベントをトリガにしてアクションを実行し、ステートを遷移しながら処理を行います。

 こうした状態遷移を持つモデルを実装する場合、ステート管理が煩雑になりがちです。しかしWFでは、ステート管理やワークフローに伴うさまざまな処理をWFの提供するフレームワークに任せることができます。

それぞれの特徴

 シーケンシャルワークフローは、処理シーケンスをモデル化したもので、基本的に止まることなく処理が続いて流れていきます(もちろん、アクション内でブロックが発生して処理が止まることはあります)。

 それに対し、ステートマシンワークフローはステートを中心に、ステート間を繋ぐイベントとアクションをモデル化したもので、イベントがない限り処理は止まっており、イベントが発生した時点でアクションが実行されてステートが変化していきます。

 実は、シーケンシャルワークフローはステートマシンワークフローの特殊なパターン(初期状態と終了状態以外のステートを持たないステートマシンワークフロー)と言えます。従って、すべてのシーケンシャルワークフローはステートマシンワークフローとして表現できます。実装では、扱う対象が特にステートを持たず、シーケンシャルワークフローで表現できるものか、ステート・イベント・アクションの組み合わせで構成されるステートマシンワークフローで表現する必要があるものか、を検討しなければなりません。

WFのアーキテクチャ概観

 WFのアーキテクチャは次のようになっており、ホストプロセス上にWFの提供するフレームワークが載り、その上でアクティビティ群を実行するイメージとなります。

WFのアーキテクチャ
WFのアーキテクチャ

 ランタイムサービスでは、後ほど触れる永続化サービスやトランザクション管理など、ワークフローをホスティングする際に任意に追加可能なサービスが提供されます。

 アクティビティフレームワークでは、アクティビティの例外ハンドリングや直列化サービス、Visual Studioのデザイナ上でアクティビティを配置するためのビジュアライザなどが提供されます。

 最上位に来るのがワークフローを構成するアクティビティ群です。WFでは、本項で扱う標準アクティビティだけでなく、自作のカスタムアクティビティもワークフローエンジン上で実行できます。

カスタムアクティビティ
 標準のアクティビティはシンプルなものに限定されているため、WFを使っているともう少し高度な部品が欲しくなるものです。WFでは、カスタムアクティビティを追加することで、ワークフロー内に新たな機能を追加していくことができます。
 WFのWebページでは、メール送信アクティビティやForEach・Switchといった条件分岐のためのアクティビティなど、さまざまなカスタムアクティビティが紹介されています。ぜひ試してみてください。

WFのメリット

 先ほどワークフローを使うことのメリットを列挙しましたが、さらにWFでワークフローを実行することには、次のようなメリットがあります。

ホスティング方法が任意

 WFには特別なサーバアプリケーションは存在しません。WFを使うことで、ワークフローをASP.NET WebサービスやWindows Forms、コンソールアプリケーションといった、さまざまな種類のアプリケーションでホスティングできます。

ホスティング方法の柔軟さ
 このシリーズではWPF/WCF/WFと.NET Framework 3.0で導入されたコンポーネントの概要を見てきましたが、ホスティングの柔軟さ、自由度の高さが、これらのフレームワークの一つの特徴と言えるかもしれません。
 WCF/WFはサービスのホスティングに関して、アプリケーションの種類には依存していません。
 また、WPFはUIに直接関係するフレームワークのため、どんなアプリケーション形態でも使えるわけではありませんが、それでもWindowsアプリケーションだけでなく、XAMLブラウザアプリケーションというWebベースのアプリケーション形態を持っています。
 アプリケーション形態ごとに使用する技術がバラバラでは覚えるのも大変です。一度覚えればさまざまな場面に応用できる点はこれらのフレームワークのメリットと言えるでしょう。

長期のアクティビティへの対応・ワークフローの永続化

 ワークフローの中にはそのコンピュータ内で完結する、あるいは他のコンピュータと通信するなどの比較的短時間(~数十秒)で終了するアクティビティだけでなく、上長が決裁ボタンを押すなど、人間がかかわるために終了までにかなりの時間(~数日)がかかるアクティビティも存在します。

 こうした長期間にわたるアクティビティを実行する場合、多数のアクティビティが長期間メモリ上に待機することになって、性能劣化を引き起こしかねません。WFではアイドル状態になったワークフローをSQL Serverなどに永続化させることができ、長期間にわたるワークフロー実行をサポートしています

次のページ
WFが提供するアクティビティ群

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Vista時代のプログラミングモデル .NET Framework 3.0入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1572 2007/09/20 16:09

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング