お手軽ビジネスルール管理(BRMS)

最近BRMSという言葉とよく聞くようになりました。言葉だけは以前から知っていいて昔のエキスパートシステムの派生版のように思っていました。しかし、現在はより広範囲に、(少し違和感を感じますが)プログラムの自動生成的なものにもBRMSという言葉を使うケースもあるようです。
今回は前者のエキスパートシステムで利用されるIF−THEN型ルール実行エンジンを.NET環境でお手軽に導入できるので紹介します、

WF(Windows Workflow Foundation)ビジネスエンジン

ビジネスルールを実行するためのエンジンは実は.NET FrameworkのWFに以前から用意されています。どのような機能があるかはWindows Workflow Foundation ルール エンジンの紹介を参考にしてもらえば分かると思いますが、このルールエンジンはワークフローデザイナで利用するのが一般的なのですが、ワークフローデザイナーからでなくても利用できます。それがExecute Windows Workflow Rules without Workflowにサンプルと共に紹介されています。

ビジネスルールの定義

ビジネスルールを実行する単位としてのルールセットといいものがあり、これを定義するエディターが用意されています。

このエディターを表示させるのは以下のように専用のダイアログを表示するコードだけで、このエディタではインテリセンスも効きます。この例はOrderクラスに対してのビジネスルールを定義しています。

var ruleSetDialog = new RuleSetDialog(typeof(Order), null, null); 
ruleSetDialog.ShowDialog();
var ruleSet = ruleSetDialog.RuleSet;

ビジネスルールの実行

定義したビジネスルールはシリアル化可能でファイルなどに保存できます。ビジネスルールの実行も簡単で以下のようなコードです。

var validation = new RuleValidation(typeof(Order), null);
var execution = new RuleExecution(validation, someOrder);
ruleSet.Execute(execution);

こんなに簡単に利用できるので、単にロジックを外だししたい場合に動的な式エディターとしても利用するのもありかもしれません*1。知っていると案外便利に利用できると思います。

*1:パフォーマンスは心配ですが...