WCF/WFと宣言的プログラミング

今週末は現プロジェクトのとあるWebサービスを,(趣味で)ためしにWCF/WFにリプレイスしてみました.といいつつ,1日は単なるリファクタリングに終わり,実際のリプレイス作業は今日1日しかできてないんですが...
構成としては,

  • WCF Service
  • Sequencial Workflow Library

と2つのプロジェクトを作成し,WCF ServiceがワークフローをManualWorkflowSchedulerServiceを使って管理・起動させてます.パラメータをどう渡すのか,多肢選択をどう実現するのか*1とかいろいろありましたが,ようやく勘所が少しずつ掴めてきた気がする.とはいえエラー処理などは一切サボっているので,実際にプロジェクトに投入するのはまだまだ先のことになりそうです.
それでも収穫はありました.WCFはともかくWFは遅いですね.やり方が悪いだけ,という可能性ももちろん考えられるけど,どちらかというと長いスパンで実行されるようなプロジェクト(いわゆるワークフロー)向けのような気がする.うちのプロジェクトはパフォーマンス重視で,エラー発生時は単純にリランするだけなので,WFはオーバースペックかもしれない.うちのプロジェクトではWFは使わないかな.
WCFに関しては先週いろいろ調べてたんですが,すべてを把握するのは難しいですね.なので,自分が使う機能を中心につまみ食いする感じになりそう.WS-*とか食わず嫌いなのかもしれないけど,しばらく使うことはなさそう.カスタムバインディングもなるべく作成しない方針で,標準のもののみを使うようにすれば,あまり苦労しないで済むんじゃないかな?そうやって時間を稼ぎながら,少しずつ仲間を増やしてノウハウを積み上げていきたいと思います.


今回いろいろ調べてみて,WCF/WF共にプログラミングのパラダイムが変わってきているんだな,ということを感じました.どちらも,より宣言的になっている気がします.WCFは,コントラクトこそ従来のプログラミングに近いですが,それ以外は全て設定ファイルに記述するだけになっています.属性と設定で宣言することで,本来必要なコードは自動生成され,利用者(WCFを使って実際にプログラミングする人)からはそれらが隠蔽されている.WFもXomlで宣言的にワークフローを定義する.
WPFに関しては,自分はまったく追えていないのですが,おそらくASP.NETを宣言的に進化させようという方針があって,それへの解答がXAMLだったのかな,とか思ったり.
こうしてみると,相変わらずオブジェクト指向がどうとかいっているのも,もう時代遅れというか,知ってて当たり前なんだなってことをしみじみと感じます.今後は属性やCodeDOMなどを使ってのコードの自動生成と,DSLといったところがメインストリームになるかもしれませんね.自分はその辺はまったくついていけてないので,もっと勉強しないと...

*1:IfElseActivity/IfElseBranchActivityで表せる!IfElseって2値選択じゃないの?ちょっとネーミングセンスを疑うな〜