#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 есть элемент управления, который позволяет вам разрабатывать правила, а мы просто сохраняем их в базе данных.