Uncategorized

[WF 4 (1)] そのアイデアとベースクラスの変更

環境 : Visual Studio 2010 Beta 2 (.NET Framework 4)

WF 4

  1. そのアイデアとベースクラスの変更
  2. コードいらずのワークフロー (入門)
  3. ワークフローのコードと XAML の内部
  4. フローチャート (FlowCharts)
  5. アクティビティ (基礎)
  6. アクティビティコンテキスト (context) と変数 (Variable) の意義
  7. アクティビティにおけるさまざまな実行管理
  8. アクティビティのデリゲート
  9. アクティビティの非同期実行
  10. アクティビティデザイナー
  11. ブックマーク
  12. Workflow Extensions と 永続化、トラッキング
  13. デザイナーリホスティングとカスタムアプリケーション

こんにちは。

来月 (2月) に実施される Tech・Days 2010 では WCF と WF の話をします。既に社員の人たちは、スライドの締切が迫っていて、話を組み立てはじめている頃なのですが、ここで、私のセッション (WCF、WF) に大きな課題があることが判明しました。。。
既に現時点で、時間がまったく足りないことが判明したのです。(WF だけでも、ちゃんと話すと 2 時間はかかるかもしれません。。。) そこで、当日のセッションでは、主要なポイントのみをデモでお話し、昨年 (Tech・Days 2009) お話した WF の基礎的な内容などは、事前にブログで記載しておきたいと思います。Beta 2 でいくつかのデザイン変更もおこなわれていますので、その点も反映して、以降、順番に、Windows Workflow Foundation 4 (WF 4) のポイントをおさえていきたいと思います。(ただし、当日デモする内容はあまり書かないようにします。。。)

今日は、ベーステクノロジーがどのように変わったといった点を概説します。

昨年の Tech・Days 2009 にご参加された方など、既にご存じの方も多いと思いますが、Windows Workflow Foundation 4 (WF 4) では、従来の WF (Visual Studio 2005 / 2008 までの WF 3 / 3.5) から、大きくデザイン変更がおこなわれています。 WF 4 で抑えておく点は、ベースアーキテクチャを柔軟にすることで、「プログラムを書く」のではなく、「モデルドリブンに構築する」という方針に徹底的に基づいている という点です。さらに、ここでは詳しくは述べませんが、パフォーマンスも圧倒的に向上 しています。(WF でサービス構築などをされていた方にとっては、むしろ、こっちのほうが嬉しいという方も居られるかもしれません。) パフォーマンスについては、簡単なループなどを作成して確認すれば一目瞭然ですので、Visual Studio 2010 Beta 2 を持っている方は是非確認して頂けると良いと思いますが、.NET Endpoint チームのブログ によれば以前の WF のおよそ 10 – 100 倍になっています。

さて、ここでは、パフォーマンスの話はさておき、WF 4 のモデルがどのようなアイデアで変わったか概要を述べましょう。
構築するワークフローも、ワークフローの中で使用するアクティビティも、すべてはアクティビティ (Activity) クラスから継承されたオブジェクトであり、アクティビティの中にアクティビティを含めることでワークフローを構築できます。つまり、「ワークフローを作ること」 = 「アクティビティを組み合わせこと」であり、これは従来の WF 3.5 までと同じ概念です。
しかし、WF 3.5 までは、例えば、少しでもカスタムな処理を含んだワークフローを実装しようと思った場合、カスタムな変数をプログラムコードで定義したり、Code アクティビティやカスタムハンドラを挿入してその中に処理コード (プログラムコード) を記述したり、ループの際の初期化の処理などをプログラムコードで記述したりなど、実際にはかなりの部分で カスタムのプログラムコードを混ぜて書いていた ことでしょう。つまり、「モデル」と「プログラム」の境界は、ある意味曖昧な部分が多く存在せざるを得ませんでした。

WF 4 は、機能レベルで細かく見ると (次回以降も述べるような) さまざまな機能拡張がおこなわれていますが、もっとも大きなデザイン変更のポイントは、この境界の曖昧さを極力排除し、真の “モデル駆動な” 開発を目指している点です。これは、今後の Windows Azure や、Oslo を構成する上で必要なデザイン変更であると言えます。
このポイントは、次回以降、実際の例をみながら実感して頂きたいと思いますが、今回は、まず、今後のために、使用するベースクラスを軽く見てみたいと思います。

ワークフローも個別のアクティビティも、すべて Activity クラスを継承しているという点はこれまでの WF と変わらないのですが、その Activity として、System.Workflow 名前空間の System.Workflow.ComponentModel.Activity ではなく、新しい System.Activities 名前空間のSystem.Activities.Activity が使用 されています。つまり、WF 4 は、構造的に、従来の WF 3.5 の拡張ではなく、これまでとまったく異なるクラスにより構成されています。(SharePoint 開発に関与されている方など、今後の移行を心配される方も多いと思いますが、移行については WF 4 Migration Guidance にドキュメントがまとめられていますので、いずれ説明の機会を作りたいと思います。ドキュメントによれば、移行用のツールなども検討されていることが記載されています。なお、.NET 4 でも、従来通り、WF 3.5 を使用できます。)

皆さんが WF 4 で開発をおこなう際には、上述した System.Activities.Activity をそのまま使うことはまずありません。WF 4 で提供されている標準アクティビティなども含め、System.Activities.Activity から継承された以下のクラスをベースクラスとして使用します。

  • CodeActivity
    従来のActivity クラスのように、Execute メソッドを実装してその処理を実行するもっともプリミティブなアクティビティです。
  • NativeActivity
    上述した CodeActivity のすべての機能を持ち、かつ、アクティビティコンテキスト (これについては、いずれ説明します) を使って、アクティビティ実行のアボート (abort)、子アクティビティのキャンセル (cancel)、ブックマーク (bookmark) の使用、アクティビティの高度なスケジューリングなどが可能です。
    いずれ例示したいと思いますが、NativeActivity により、従来よりも、柔軟で高度なスケジューリングや実行パターンの実装が容易に実現できます。

今回から、変数への値のわりあて、コンソールへの文字列出力などのプリミティブな処理も標準アクティビティとして存在していますが、こうした簡易な処理は CodeActivity を継承し、ワークフローを構成するルートのアクティビティなど実行スケジュールなどを管理する高度なアクティビティは NativeActivity を継承して構築されています。

厳密には、上記以外に、動的実装をおこなう場合 (つまり、実行時に、処理コードを変える場合) に使用する DynamicActivity や、非同期実行をおこなうことができる AsyncCodeActivity などもありますが、これらは、その説明の際に一緒に説明していきたいと思います。

 

関連ナンバー

 

Categories: Uncategorized

Tagged as:

19 replies»

Leave a Reply