Как разработать механизм правил?
-
01-07-2019 - |
Вопрос
Я должен создать простой механизм правил на C#.Есть какие-нибудь указания о том, как мне действовать дальше?Это минималистичный механизм правил, который будет использовать SQL-сервер в качестве серверной части.Есть ли у нас какой-либо общий план или шаблоны проектирования, которые обычно применимы к механизмам правил?Какие технологии .Net я могу использовать для его разработки?Любые указания будут полезны.Спасибо.
Решение
Если вы используете .NET 3.0 или более позднюю версию, вы может использовать обработчик правил Windows Workflow Foundation без необходимости использования Workflow.
Я сделал это в проекте, и вы можете использовать SQL или XML в качестве серверной части, и это отлично работает.Вы можете использовать интегрированную среду разработки, поставляемую с примерами рабочих процессов, и использовать ее в своих собственных приложениях.Это превосходно.
Другие советы
Я не могу поверить, что вы могли бы реализовать свои собственные, учитывая, что существует так много доступных коммерческих и открытых исходных кодов.
Я рекомендую взглянуть на InRule как на отличный коммерческий вариант по разумной цене или на NxBRE с открытым исходным кодом.
Вы также можете попробоватьhttp://rulesengine.codeplex.com/
Какой механизм правил вы ищете?Для стилевых практик?Если да, сходи проверь СтильКоп.Это не ответ, но, возможно, для вас уже есть что-то.
Есть ли у вас какие-либо указания по методу?(т.е. если это дополнено учебными материалами, что вы сейчас изучаете?) Если это довольно простая система, вы можете добиться успеха, изучая Детерминированный конечный автомат и Недетерминированный конечный автомат
Если у вас есть бизнес-аналитики для программирования механизма правил высокого уровня, тогда хорошо — выберите один из вышеупомянутых механизмов правил или создайте свой собственный (включая рабочие процессы).Если нет, то просто запишите свою бизнес-логику в коде, и если вам когда-нибудь понадобится нанять бизнес-аналитиков и переделать систему, вы находитесь в хорошем месте.
Если вы хотите написать свою реализацию примерно так...
[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()
{
// ARRANGE
int threshold = 5;
int actual = 10;
// ACT
var integerRule = new IntegerGreaterThanRule();
integerRule.Initialize(threshold, actual);
var integerRuleEngine = new RuleEngine<int>();
integerRuleEngine.Add(integerRule);
var result = integerRuleEngine.MatchAll();
// ASSERT
Assert.IsTrue(result);
}
...или это...
[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()
{
// ARRANGE
int threshold = 5;
int actual = 10;
// ACT
var integerRule = new IntegerGreaterThanRule(threshold);
var integerRuleEngine = new RuleEngine<int>();
integerRuleEngine.ActualValue = actual;
integerRuleEngine.Add(integerRule);
// Get the result
var result = integerRuleEngine.MatchAll();
// ASSERT
Assert.IsTrue(result);
}
...тогда, возможно, посмотрите мой простой механизм правил здесь: http://www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx