我要求构建新的规则引擎,其中我有这样的规则,以表格格式存储在Excel工作表中。
<If> "Name = Nita "
<Value> "200"
<else> "Name = Gita"
<value> "300"
<LookInto> "/Name/@Income"
我有两个文件说1 n 2.我需要在第一个文件中看到Name是Nita还是Gita。根据执行情况,我将获得价值。现在这个结果值我需要与第二个文件进行比较,第二个文件是一个xml文件,其路径已被定义。
任何人都可以告诉我C#中有什么可以有效地用来开发相同的东西,或者任何人都可以建议我如何使用C#来实现这个目标。我需要一些关于类设计的想法。< / p>
我正在使用.Net 1.1。
答案 0 :(得分:4)
首先,您需要创建可以定义规则的类。一旦你有了这个结构,你就可以构建一个利用这些类的引擎。
我会考虑创建类似的东西:
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 AND b)或(c AND d),则此结构会更好 - 我会留给您现在想想。
请注意我在这里使用了一些C#3.0构造,你需要在1.1中创建完整的私有属性。
答案 1 :(得分:0)
您可以使用boo创建DSL,但我不知道这是否适用于1.1
答案 2 :(得分:0)
你将受到.NET 1.1的限制。我认为你的第一步将是升级。
后续步骤可能涉及Windows Workflow Foundation内置的规则引擎;该引擎以及与之相关的图形设计人员可以在WF之外使用。
另一件需要考虑的是验证应用程序块,它是Microsoft Enterprise Library的一部分。
六年前,当.NET 1.1统治地球时,这些事情都不存在。
答案 3 :(得分:0)
或者你可以让其他人做这项工作并使用一个好的.NET规则引擎,如InRule Technology的产品,.Net的IBM / ILOG规则或.Net的Blaze Advisor。它们运行良好,并将在.Net
中为您提供强大的规则环境