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.

Foi útil?

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

  1. Eu não posso acreditar que você poderia implementar seu próprio considerando que há tantos disponíveis comercialmente e de código aberto.

  2. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top