come posso costruire motore di regole in grado di eseguire definito dall'utente se le regole altro in C # .NET

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

  •  12-09-2019
  •  | 
  •  

Domanda

Ho necessità di costruire nuovo motore di regola in cui ho regola come questa che è memorizzato nel foglio Excel, in formato tabulare.

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

Ho due file dicono 1 n 2. Ho bisogno di vedere in primo file che se il nome è Nita o Gita. Sulla base di esecuzione mi metterò valore. Ora, questo valore del risultato ho bisogno di confrontare con il secondo file, che è un file XML e il cui percorso è stato definito in.

qualcuno mi può suggerire che c'è qualcosa in C # che posso utilizzare in modo efficace per sviluppare la stessa ,, o qualcuno mi può suggerire come posso raggiungere questo obiettivo con C # .. Ho bisogno di qualche idea per la progettazione di classe dello stesso.

Sto usando Net 1.1.

È stato utile?

Soluzione

In primo luogo, è necessario creare le classi che possono definire le regole. Una volta che avete questa struttura nel luogo, si sarà in grado di costruire un motore che utilizza tali classi.

Vorrei guardare a creare qualcosa di simile a:

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
}

Poi vai da lì ....

Questa struttura sarebbe meglio se fosse stato cambiato per avere un insieme di regole che potrebbero essere aggiunte a un gruppo di regole, ad esempio (A e B) OR (C e D) - Lascio questo a voi pensare per ora.


Si prega di notare che sto utilizzando alcuni C # 3.0 costrutti qui, sarà necessario creare piena proprietà private in 1.1.

Altri suggerimenti

È possibile creare un DSL con boo, ma non so se questo funziona con 1.1

Si sta andando ad essere molto limitato per .NET 1.1. Credo che il primo passo sarà quello di aggiornare.

I passi successivi potrebbero coinvolgere il motore di regole integrato in Windows Workflow Foundation; questo motore, ed i progettisti grafici ad esso associati, sono stati progettati per essere utilizzabile all'esterno della WF.

Un'altra cosa da guardare sarà la convalida Application Block che fa parte del Microsoft Enterprise Library .

Nessuna di queste cose esistevano sei anni fa, quando .NET 1.1 si mordevano la coda.

Oppure si può semplicemente lasciare che qualcun altro fare questo lavoro e utilizzare un buon motore di regole .NET prodotto simile di InRule tecnologia, regole IBM / ILOG per .Net o Blaze Advisor per .Net. Essi funzionano bene e vi darà un potente ambiente di regole in .Net

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top