¿Cómo puedo construir motor de reglas que se pueden ejecutar si el usuario define las reglas else en C # .NET

StackOverflow https://stackoverflow.com/questions/771843

  •  12-09-2019
  •  | 
  •  

Pregunta

Tengo necesidad de construir un nuevo motor de reglas en las que he estado como éste que se almacena en la hoja de Excel, en formato tabular.

<If>  "Name = Nita "
<Value> "200"
<else> "Name = Gita"
<value> "300"
<LookInto> "/Name/@Income"

Tengo dos archivos dicen que 1 n 2. Tengo que ver en primer archivo que si el nombre es Nita o Gita. Sobre la base de la ejecución voy a tener valor. Ahora bien, este valor del resultado i necesidad de comparar con el segundo archivo, que es un archivo XML y cuya trayectoria se ha definido en.

¿alguien puede sugerir que ¿hay algo en C # que pueda utilizar con eficacia para desarrollar la misma ,, o alguien me puede sugerir cómo puedo lograr esto con C # .. necesito alguna idea para el diseño de clase de la misma.

Estoy utilizando .Net 1.1.

¿Fue útil?

Solución

En primer lugar, es necesario crear clases que pueden definir sus reglas. Una vez que tenga esta estructura en su lugar, usted será capaz de construir un motor que utiliza esas clases.

Me gustaría ver la creación de algo como:

class RuleEngine 
{
  public RuleMatch[] RuleMatches { get; set; }
  public void RunEngine(inputdata...) 
  {  
    // do processing in here
  }
}

class RuleMatch 
{
  public Rule[] Rules { get; set; }
  public Object ValueIfMatched { get; set; }
}

class Rule 
{
  public String FieldName { get; set; }
  public MatchType Match { get; set; }
  public Object Value { get; set; }
)

enum MatchType 
{
  Equal = 1,
  NotEqual = 2,
  GreaterThan = 4,
  LessThan = 8,
  Like = 16
}

A continuación, vaya de allí ....

Esta estructura sería mejor si se han cambiado a un grupo de reglas que podrían añadirse a un grupo de reglas, por ejemplo (A y B) (C y D) O - Voy a dejar esto a usted a pensar por ahora.


Tenga en cuenta que estoy usando algunas de C # 3.0 construcciones aquí, tendrá que crear propiedades privadas completos en 1.1.

Otros consejos

Se puede crear una conexión DSL con Boo, pero no sé si eso va a trabajar con 1,1

Vas a ser muy limitado por .NET 1.1. Creo que el primer paso será actualizar.

Los pasos subsiguientes podrían constituir el motor de reglas integrado en Windows Workflow Foundation; este motor, y los diseñadores gráficos asociados con ella, se han diseñado para estar fuera utilizable de WF.

Otra cosa a considerar será el bloque de aplicación de validación que forma parte de la Microsoft Enterprise Library .

Ninguna de estas cosas existía hace seis años, cuando .NET 1.1 dominaban la tierra.

O simplemente puede dejar que alguien más haga este trabajo y utilizar un buen motor de reglas de .NET como producto de InRule Tecnología, Reglas de IBM / ILOG para Asesor .Net o Blaze para .Net. Funcionan bien y le dará un potente entorno de reglas en .Net

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