Pregunta

Se supone que debo crear un motor de reglas simple en C#.¿Alguna pista sobre cómo puedo proceder?Es un motor de reglas minimalista y usaría el servidor SQL como back-end.¿Tenemos algún plan general o patrón de diseño que generalmente se aplique a los motores de reglas?¿Qué tipo de tecnologías .Net puedo utilizar para diseñar uno?Cualquier dirección sería útil.Gracias.

¿Fue útil?

Solución

Si está utilizando .NET 3.0 o posterior, puede utilizar el motor de reglas de Windows Workflow Foundation sin tener que utilizar Workflow en realidad.

Hice esto en un proyecto y puedes usar SQL o XML como backend y funciona muy bien.Puede utilizar el IDE que viene con los ejemplos de flujo de trabajo y ponerlo en sus propias aplicaciones.Es excelente.

Otros consejos

  1. No puedo creer que implementes el tuyo propio considerando que hay tantos disponibles comercialmente y de código abierto.

  2. Recomiendo echarle un vistazo a InRule como una excelente opción comercial a un precio razonable, o a NxBRE en el espacio de código abierto.

También puedes probarhttp://rulesengine.codeplex.com/

¿Qué tipo de motor de reglas estás buscando?¿Para prácticas de estilismo?Si es así, ve a ver EstiloCop.No es la respuesta, pero es posible que ya haya algo para usted.

¿Se le da alguna indicación sobre el método?(es decir, si esto se complementa con material del curso, ¿qué estás aprendiendo actualmente?) Si se trata de un sistema bastante básico, es posible que tengas éxito investigando Máquina determinista de estados finitos y Máquina de estados finitos no determinista

Si tiene analistas de negocios para programar el motor de reglas de alto nivel, entonces está bien: elija uno de los motores de reglas mencionados anteriormente o implemente el suyo propio (incluidos los flujos de trabajo).Si no es así, simplemente codifique su lógica de negocios en código y si alguna vez necesita contratar analistas de negocios y rehacer el sistema, está en un buen lugar para hacerlo.

Si desea escribir su implementación algo como esto...

[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);
}

...o esto...

[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);
}

...Entonces quizás consultes mi motor de reglas simple aquí: http://www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top