SHOEISHA iD

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

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

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

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

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

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

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

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

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

はじめに

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

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

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

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

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

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

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

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

対象読者

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

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

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

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

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

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

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

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

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

 がポイントとなります。

データ交換サービス

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

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

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

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

  • 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/1651 2007/09/25 10:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング