Come progettare un motore di regole?
-
01-07-2019 - |
Domanda
Dovrei creare un semplice motore di regole in C#.Qualche indizio su come posso procedere?È un motore di regole minimalista e utilizzerebbe il server SQL come back-end.Esistono progetti generali o modelli di progettazione che generalmente si applicano ai motori di regole?Che tipo di tecnologie .Net posso utilizzare per progettarne uno?Qualsiasi indicazione sarebbe utile.Grazie.
Soluzione
Se utilizzi .NET 3.0 o versione successiva, tu può utilizzare il motore delle regole di Windows Workflow Foundation senza dover utilizzare effettivamente il flusso di lavoro.
L'ho fatto su un progetto e puoi utilizzare SQL o XML come backend e funziona benissimo.Puoi utilizzare l'IDE fornito con gli esempi di flusso di lavoro e inserirlo nelle tue app.È eccellente.
Altri suggerimenti
Non posso credere che implementeresti il tuo considerando che ce ne sono così tanti disponibili in commercio e open source.
Consiglio di dare un'occhiata a InRule come un'ottima opzione commerciale a un prezzo ragionevole o a NxBRE nello spazio open source.
Puoi anche provarehttp://rulesengine.codeplex.com/
Che tipo di motore di regole stai cercando?Per pratiche di styling?Se è così, vai a controllare StyleCop.Non è la risposta, ma potrebbe già esserci qualcosa là fuori per te.
Hai qualche indicazione sul metodo?(cioè se questo è integrato dal materiale del corso, cosa stai imparando attualmente?) Se questo deve essere un sistema abbastanza semplice, potresti trovare successo esaminandolo Macchina a stati finiti deterministica E Macchina a stati finiti non deterministica
Se disponi di analisti aziendali per programmare il motore di regole di alto livello, allora va bene: scegli uno dei motori di regole sopra menzionati o creane uno tuo (compresi i flussi di lavoro).In caso contrario, codifica semplicemente la logica del tuo business in codice e, se mai avessi bisogno di assumere analisti aziendali e rifare il sistema, sei nella buona posizione.
Se vuoi scrivere la tua implementazione qualcosa del genere...
[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 questo...
[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);
}
...allora forse dai un'occhiata al mio semplice motore di regole qui: http://www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx