Como desenhar um mecanismo de regras?
-
01-07-2019 - |
Pergunta
Eu deveria criar um mecanismo de regras simples em C #. Alguma pista sobre como posso proceder ?. É um mecanismo de regra minimalista e usaria servidor SQL como o back-end. Será que temos quaisquer projetos ou desenhos padrões gerais que geralmente se aplicam aos motores de regras? Que tipo de tecnologias .NET que posso usar para criar um? Quaisquer direções seria útil. Obrigado.
Solução
Se você estiver usando .NET 3.0 ou posterior, você pode usar o Mecanismo de regras de Windows workflow Foundation sem ter que usar efectivamente workflow.
Eu fiz isso em um projeto, e você pode usar SQL ou XML como backend, e ele funciona muito bem. Você pode usar o IDE que vem com os exemplos de fluxo de trabalho e colocá-lo em seus próprios aplicativos. É excelente.
Outras dicas
-
Eu não posso acreditar que você poderia implementar seu próprio considerando que há tantos disponíveis comercialmente e de código aberto.
-
Eu recomendo dar uma olhada InRule como uma ótima opção comercial que é razoável preço, ou NxBRE no espaço de código aberto.
Você também pode tentar http://rulesengine.codeplex.com/
O tipo de mecanismo de regras que você procura? Para denominar práticas? Se assim for, ir verificar StyleCop . Não é a resposta, mas pode já ser algo lá fora para você.
Você está dada qualquer indicação sobre o método? (Ou seja, se este é complementado por material do curso que você está atualmente aprendendo?) Se isso é feito para ser um sistema bastante básico que você pode encontrar o sucesso olhando para a Deterministic Finite State Machine e nondeterministic máquina de estados finitos
Se você tem analistas de negócios para programar o mecanismo de regras de alto nível, então tudo bem - escolha um dos motores de regras antes mencionadas ou rolar seus próprios (incluindo fluxos de trabalho). Se não, então é só codificar sua lógica de negócios em código e se você precisar de contratar analistas de negócios e refazer o sistema, você está em um bom lugar para estar.
Se você quer escrever sua implementação algo assim ...
[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);
}
... ou isso ...
[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);
}
... então talvez confira o meu mecanismo de regras simples aqui: http: / /www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx