1

我需要构建新的规则引擎,其中我有这样的规则,它以表格格式存储在 Excel 工作表中。

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

我有两个文件说 1 n 2。我需要在第一个文件中查看 Name 是 Nita 还是 Gita。基于执行,我将获得价值。现在我需要将此结果值与第二个文件进行比较,该文件是一个 xml 文件,其路径已定义为 .

任何人都可以建议我在 C# 中有什么可以有效地用于开发相同的东西,或者任何人都可以建议我如何用 C# 实现这一点。我需要一些相同的类设计的想法。

我正在使用.Net 1.1。

4

4 回答 4

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) OR (c AND d) - 我将把这个留给您考虑现在。


请注意,我在这里使用了一些 C# 3.0 构造,您需要在 1.1 中创建完整的私有属性。

于 2009-04-21T09:50:10.820 回答
0

你可以用 boo 创建一个 DSL,但我不知道这是否适用于 1.1

于 2009-04-21T10:08:20.637 回答
0

您将受到 .NET 1.1 的极大限制。我认为您的第一步将是升级。

后续步骤可能涉及 Windows Workflow Foundation 中内置的规则引擎;这个引擎,以及与之相关的图形设计师,被设计成可以在 WF 之外使用。

另一件值得关注的事情是验证应用程序块,它是Microsoft Enterprise Library的一部分。

六年前,当 .NET 1.1 统治地球时,这些东西都不存在。

于 2009-04-21T10:16:59.430 回答
0

或者您可以让其他人完成这项工作并使用良好的 .NET 规则引擎,例如 InRule Technology 的产品、.Net 的 IBM/ILOG 规则或 .Net 的 Blaze Advisor。它们运行良好,将在 .Net 中为您提供强大的规则环境

于 2009-06-04T21:26:32.340 回答