8

问候!

在基于 Web 的项目上工作是业务规则和逻辑需要由客户定制。我想这样做,而不必每次在系统上注册新客户端时都重新编译应用程序。到目前为止,我概述的架构是:

  1. Windows 工作流程:创建动态工作流程并将其保存到数据库。
  2. 反射:创建业务规则接口并使用反射加载自定义客户端程序集。
  3. 真正的业务规则引擎
  4. 实现类似结构图的 IOC 容器。[zaff:添加 6/4]

你有没有实现过类似的东西?如果是这样,你的经验是什么?最后还有另一个我应该探索的解决方案吗?

谢谢你的帮助!!

4

6 回答 6

2

您可以像这样执行数据驱动的业务规则。决策树也是一个不错的选择。

您可能还会将面向方面的编程视为实现业务规则的一种方式。

我对 Rete 归纳规则引擎的唯一警告是规则集应该保持小并且靠近使用它们的对象。如果您可以将对象的行为封装在作为其状态一部分的规则引擎中,那就更好了。我不喜欢将数千条规则转储到单个规则引擎中的“企业”解决方案,该引擎成为企业每个部分的依赖项。

于 2009-06-04T01:06:51.503 回答
2

我已经实现了您提到的大多数方法。答案可能取决于多种因素。

哪些客户角色将对业务规则进行更改(例如业务分析师、开发人员、高级用户等)?对业务分析师的有意义的支持可能需要一个在数据库中具有外部化规则的规则引擎和一个可用的 UI。对开发人员的有意义的支持可能就像利用 MEF ( http://www.codeplex.com/MEF ) 之类的东西一样简单。

您可能还会考虑业务规则需要更改的频率以及可能适用的相关操作要求的类型(例如,主机进程必须保持运行,应用程序域卸载正常等)。一个好的选择可能需要仔细考虑未来可能与不太可能的需求。

于 2009-06-04T01:58:30.090 回答
1

这可能不是最好的方法,但我的公司已经在几个案例中实施了您的#2 选项,并取得了成功。

我们基本上在数据库或配置文件中配置客户端,并且对于每个客户端,都会有一个查找表,其中存储一个类名以调用以执行任何业务操作。当代码收到对客户端 A 的请求时,它会查找要使用的类,并创建它并通过反射执行它。

我不太喜欢将与代码相关的东西放入数据库中,但它实际上可以正常工作并且在这种情况下并不太复杂。

于 2009-06-04T01:07:34.840 回答
1

我建议1和3的组合。

但是不要将工作流存储在数据库中,将其存储为决策树或规则流(我们称之为)。

当您拥有可视化的、操作驱动的工具(例如Visual Rules )时,更改工作流以适应特定客户或将他们联合到他们的个人资料中是一项简单的任务。让您的业务分析师或支持人员进行更改也有很多好处,而无需调整代码。

此外,这些要求都不需要复杂的 AI 工具,例如 RETE 和推理——顺序逻辑是最好的。

于 2009-06-05T21:30:04.363 回答
0

我喜欢 WF,但如果你看过它并决定想要一些不同的东西,你应该看看K2。此外,BizTalk具有 BRE 支持。

于 2009-06-04T01:09:04.480 回答
0

我基于以下开源 .NET Business Rule Engine NxBRE创建了一个动态规则引擎。我使用 Flow 引擎作为我的动态规则引擎的主要示例。

我使用了您问题中提到的相同架构。

于 2009-06-04T01:15:52.203 回答