Механизм правил рабочего процесса Windows — определяет, какое правило выполняется

#c# #workflow-foundation-4 #workflow-activity #rule-engine

#c# #рабочий процесс-основа-4 #рабочий процесс-действие #механизм правил

Вопрос:

НАСТРОЙКА

Мы используем механизм правил рабочего процесса Windows для реализации системы скидок. Наша настройка правил выглядит следующим образом:

 Rule Name: 10% Discount on Foo Chairs
Priority: 0
Reevaluation: Never
Active: True
Condition: this.MatchesSKUs("SKU1", "SKU2")
Then Actions: this.ForMatchingSkus.ApplyDiscount(.10m)
  

У нас определено несколько таких правил, и некоторые продукты могут подпадать более чем под одно правило. Внутри нашего объекта «корзина» у нас есть метод, который выполняет механизм правил.

 var discountEngine = new DiscountEngine(discountRuleSetEnabled);
var execution = new RuleExecution(validation, discountEngine);
discountEngine.ruleExecution = execution;
if (discountRuleSet.RuleSet != null)
{ discountRuleSet.RuleSet.Execute(execution); }
  

Скидки работают хорошо и хорошо, и все почти в порядке.

ПРОБЛЕМА

По мере выполнения правил мне нужно отслеживать правила, которые фактически используются, и предоставлять скидку> 0. Например, приведенное выше правило в конечном итоге запускает

 ApplyDiscount(decimal discountPercent)
  

метод, который привязывает объект скидки к позиции корзины. Мне нужно знать, что этот экземпляр «Применить скидку» был вызван с помощью правила 10% скидки на стулья Foo. Я пробовал различные методы, но не могу найти, где передается контекст каждого правила. Я просматривал объект ActivityExecutionContext, но у меня возникли проблемы с получением контекста в рамках методов условия или действия, которые я настроил.

Комментарии:

1. Я ничего не знаю о WF, но имею опыт работы с несколькими другими механизмами правил. Просто из любопытства: что вы делаете, если бизнес решает изменить условие, или приоритет, или действие любого из ваших правил? Повторное тестирование, повторная компиляция, повторное развертывание?

2. У нас есть набор тестов, которые мы можем выполнить, прежде чем публиковать какие-либо изменения правил в живой среде.

3. Но вам нужно перекомпилировать проект, верно?

4. Нет, правила сериализуются в строку XML и сохраняются в базе данных. В Workflow Foundation есть элемент управления, который позволяет вам разрабатывать правила, а мы просто сохраняем их в базе данных.