1

私は、注文ポータルを支援するために、ルールエンジンの実装のプロトタイプを作成中です。たとえば、アイテムの割引を提供したり、特定のアイテムを注文した場合に承認を要求したりします。また、金額、ユーザー階層の位置に関するルールを追加し、1つ以上のクライアントに適用できるようにしたいと考えています。

WWFはこのニーズに対する良い答えだと思います。

とはいえ、もっと複雑なルールを設定するのに最適な方法を見つけるのは少し難しいです。次のように、LINQクエリで最もよく説明されていると感じる「条件」があります。

var y = from ol in currentOrder.OrderLines where ol.ItemCode == "MYITEMCODE" select ol;

ルールエンジンに別のフレームワークを使用したり、オブジェクト(例:など)にプロパティやメソッドを追加OrderHasItem(ItemCode)してこれらのルールをより単純化することに反対していませんが、そうする必要はありません。新しいルールのコード変更を潜在的に要求するという道を私たちに強いるという点で、それは自滅的だと感じています。

4

2 に答える 2

3

はい、ワークフローで Linq クエリを使用できます。WF では、ルールとして参照しているのは、実行時に評価される式です。クエリは、基準に基づいて秩序のサブセットを選択しています。

たとえば、名前のコレクションがあり、'R' で始まる名前だけを表示したい場合。次のコードを書くことができました。

private static void ShowQueryWithCode(IEnumerable<string> names)
{
    Console.WriteLine("LINQ Query in Code - show names that start with 'R'");

    // Assuming there are no null entries in the names collection
    var query = from name in names where name.StartsWith("R") select name;

    // This is the same thing as 
    // var query = names.Where(name => name.StartsWith("R"));
    foreach (var name in query)
    {
        Console.WriteLine(name);
    }

    Console.WriteLine();
}

ワークフローで同じことを行うには

手順 1: IEnumerable 型の In Argument を使用してワークフローを作成する

ここで、 in 引数を追加したことがわかります 議論中

ステップ 2: タイプ IEnumerable のクエリの変数を追加する

変数を追加する前に、変数を持つアクティビティを含める必要があります。このワークフローでは、シーケンスを追加しました。

変数

手順 3: 使用する LINQ 式をクエリに割り当てる メソッド チェーンまたはクエリ構文を使用できます。

表現

ステップ 4: コレクションを反復処理する

完成したワークフローでは、ForEach アクティビティを使用して名前のリストを繰り返し処理し、コンソールに書き込みました。

ワークフロー1

この例では .NET 4.5 で C# を使用していますが、Visual Basic でも同じ手法を使用できます。

サンプルコードはこちらからダウンロードできます

于 2012-07-27T15:43:46.233 に答える
0

WFはワークフローエンジンです。工場や銀行を経営するために使用されます。ルールエンジンはそのほんの一部です。理にかなっているように、通常のWFプロジェクトでは、それを構築するために専門家の専任チームが必要です。あなたの特定の目的のためのやり過ぎのようです。要件とチームの実際のスキルとの間の典型的な戦いに、自分自身とプロジェクトを埋める可能性が非常に高くなります。

利用可能な.NETエンジンを使用することは、状況に応じてより正当化されます。カスタムルールエンジンの構築は、最初からどんなに単純に見えても、簡単な作業ではないことに注意してください。クラスのプロパティ値の設定(通常は「ファクト」または「ソース」オブジェクトと呼ばれます)またはアクションの実行(クラスのメソッドの呼び出し)は、ルールエンジンが最適な方法です。そして、それはまさにあなたが必要としているもののようです。いくつかの利用可能な.NETエンジンをチェックしてください。それらは、無料ではないにしても安価で、信頼性があります。

于 2012-07-26T18:40:41.670 に答える