SHOEISHA iD

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

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

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

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

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

ダウンロード サンプルソース (19.0 KB)

WF(Windows Workflow Foundation)は.NET Framework 3.0に搭載された新しいワークフロー基盤です。中編ではステートマシン ワークフローのプログラミングモデルについて解説し、サンプルを作成します。

はじめに

 WFチュートリアル 前編ではWFの概要、そしてシーケンシャル ワークフローのサンプルについて解説しました。中編となる今回は、ステートマシン ワークフローのプログラミングモデルについて解説し、サンプルを作成します。

 サンプルとしては、注文と発送だけを処理する簡易注文管理アプリケーションを考えます。状態遷移は以下の2つです。

  • 商品を注文すると注文完了状態(発送待ち状態)に遷移する
  • 商品を発送すると注文完了状態から発送完了状態に遷移し、終了する

 ワークフロー的には以下のようになります。

簡易注文管理アプリケーションワークフロー
簡易注文管理アプリケーションワークフロー

 実際のアプリケーションではステート数や遷移数がもっと多くなるかと思いますが、このサンプルで、

  • Visual Studio 2005でのステートマシン ワークフローのデザイン
  • ワークフロー内外のデータのやり取り
  • 複数ワークフローのハンドリング

 についてしっかり押さえておけば、多くのパターンに応用していけるでしょう。

対象読者

 本記事はC#でのプログラミングを行ったことがある方を対象としています。サンプルを動作させるための環境設定等は「WPF(Windows Presentation Foundation)+XAML入門 前編」をご覧ください。

ステートマシン ワークフロー プログラミング

 前回、「シーケンシャル ワークフロー」と「ステートマシン ワークフロー」の違いを説明しましたが、この違いはプログラミングモデルにも影響してきます。

シーケンシャル ワークフローとのプログラミングモデルの違い

 シーケンシャル ワークフローはステートを持たないため、ホスティングするアプリケーションから実行させた後は、基本的にワークフロー側で処理が進みます。従って、最初にパラメータを渡してしまえば情報のやり取りはそれほど必要ありません。ワークフローを一旦実行すれば、後はワークフローに処理をお任せできる、投げっぱなしにできる場合も多いことでしょう。

 しかし、ステートマシン ワークフローはイベントをトリガとして状態が変わっていくモデルですので、ワークフローを実行した後、ホスティングアプリケーションからイベントをワークフローに通知する必要があります。

 また、比較的短時間で終わることの多いシーケンシャル ワークフローに対し、ステートマシン ワークフローはイベントが発生しない限り処理が進まないため、複数のワークフローをハンドリングする必要があります。こうした点も、シーケンシャル ワークフローとは異なる部分と言えます。シーケンシャル ワークフローでもホスティングアプリケーションからのイベントを待つことは可能ですが、1種類のイベントを受け付けるのが基本で、複数のイベントを待ち受けようとすると煩雑なワークフローとなってしまいます。ステートマシン ワークフローでは、複数のワークフローに対して、複数のイベントを同時に待ち受けることができますので、イベントドリブンのモデルをそのままワークフロー化することができます。

 繰り返しとなりますが、ステートマシン ワークフローでは、

  • ワークフロー内外のデータのやり取り
  • 複数ワークフローでのイベントハンドリング

 がポイントとなります。

データ交換サービス

 ワークフローとホスティングアプリケーションの情報のやり取りのため、WFには「データ交換サービス」というサービスがあります。データ交換サービスはワークフローにイベントを発行し、ワークフローからホスティングアプリケーションを呼び出すためのメソッドを公開します。

 実際には、C#のインターフェースとして情報をやり取りするためのイベント/メソッドを作成し、それをデータ交換サービスを介してワークフロー ランタイムに登録することになります。

会員登録無料すると、続きをお読みいただけます

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

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます
  • ・翔泳社の本が買える!
    500円分のポイントをプレゼント

メールバックナンバー

次のページ
ステートマシン ワークフロー サンプル

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1651 2007/09/25 10:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング