构建一个可能具有自定义业务规则的无限类的解决方案

时间:2011-10-18 18:33:44

标签: design-patterns architecture .net-3.5

我正在开发一个“智能”问题跟踪应用程序,需要确定在实际允许提交之前是否可以在故​​障单中提交特定问题。

我目前遇到的设计问题是,我可以使用许多不同类型的“可提交”问题,每个问题都有自己独特的业务逻辑,可以确定问题是否可以实际提交。根据我的设计说明,我有以下条件:

  1. 支持多个问题(未知数,理论上可能是无限的)
  2. 每个问题都与特定货件直接相关(即用户选择他们的问题,然后提示他们选择/输入他们遇到问题的货物)
  3. 每个问题都有自己的自定义验证/业务规则(数据由货件提供),用于确定问题是否可以继续。例子是:
    • 如果问题是损坏索赔,则必须在60天内收到货件。
    • 如果问题是取消/退款,则无法交付货件状态。
  4. 这个想法几乎就像一个保险处理应用程序,但所有信息都是通过询问货物提供的,而不是必须依赖用户输入(例如,我不需要询问货物何时发送,我可以问它的PickupDate的装运对象,并且只有两个结果:1)问题可以打开一个案例,或者2)不,问题不能有案例(又名“艰难的运气”选项)。在体系结构方面,即使我使用某种可支持多种类型问题的STRATEGY模式,也需要为每个派生类型的问题创建自定义类。例如,我需要一个DamageClaimIssue和一个CancellationRequestIssue,谁知道还有什么;这在开发人员方面似乎很麻烦,因为几乎可以随心所欲地添加新类型,并且需要开发人员启动新的派生类并实现验证逻辑,然后重新编译和重新部署。

    使用策略是解决此类问题的最佳方式,还是我忽略了某些事情?理论上我想使架构足够通用以适应不同的问题(我知道会有超过2-3个,我只是不知道它们究竟是什么),但我不想去使用XML或类似工具的一些单片工作流引擎的路线,可以让动态逻辑动态定义。我必须使用标准的.NET 3.5库(即没有像WCF或Workflow Foundation那样)。

    是否有任何建议或指示让我朝着正确的方向前进?

3 个答案:

答案 0 :(得分:2)

这里要问的第一件事是:谁将负责在您的系统中定义新类型的问题?

当我理解正确时,它应该是用户(可能不是每个用户,而是“高级用户”),而不是系统的开发人员。因此,您需要一个通用的问题类型,或者一些不应该太具体的问题类型,并且可以通过用户给出的参数进一步细化。关于验证/业务规则:您可以尝试为此定义DSL,用户可以自行定义这些规则。此DSL中定义的规则可以存储为类型定义的一部分,可能存储在数据库中,因此在验证适用时,引擎必须解释DSL代码。

当然,困难的部分是为您的目的定义一个好的DSL,很容易被用户理解并且足够灵活,让他们描述他们需要的每个规则。

答案 1 :(得分:0)

我认为Doc的答案很好,虽然我会首先调查规则引擎,因为它听起来像你需要的东西。为什么重新发明轮子?您应该能够找到开源和付费版本。

我们最近使用了一个名为iLog的IBM工具的.Net端口;我可以说它没有痛苦,但它完成了这项工作。从内存中,用户可以在Excel中编辑规则并导入到应用程序中。

我必须尽可能保持简单的建议。很可能某个地方会有一个优雅的“混乱”规则等(这本身就很复杂)确保你保持其他一切尽可能简单 - 你不需要复杂/凌乱的部署/升级/版本控制情况。

答案 2 :(得分:0)

我建议使用Java中的drools等业务规则引擎系统。

http://droolsdotnet.codehaus.org/