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.

È stato utile?

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

  1. Non posso credere che implementeresti il ​​tuo considerando che ce ne sono così tanti disponibili in commercio e open source.

  2. Consiglio di dare un'occhiata a InRule come un'ottima opzione commerciale a un prezzo ragionevole o a NxBRE nello spazio open source.

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

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