Validation MS验证块或工作流规则引擎?

Validation MS验证块或工作流规则引擎?,validation,workflow-foundation,enterprise-library,validation-application-bl,Validation,Workflow Foundation,Enterprise Library,Validation Application Bl,对于将要开发的大型应用程序,我们正在选择验证框架。虽然工作流规则引擎不是严格的验证框架,但它本身可以不使用工作流基础。它似乎提供了在运行时使用的数据库中指定规则的灵活性。但是,似乎无法在代码中指定规则 如果更大的灵活性是一项要求(不一定需要业务分析师编辑规则),那么您更喜欢这两项中的哪一项?为什么?这与您的具体要求非常重要。”“灵活”本身不是一个好的要求,因为它是不可测量的。如果某件事情是灵活的,这是非常主观的 我不熟悉微软的商业规则引擎,所以我不能对此发表评论。不过,我对Microsoft企业

对于将要开发的大型应用程序,我们正在选择验证框架。虽然工作流规则引擎不是严格的验证框架,但它本身可以不使用工作流基础。它似乎提供了在运行时使用的数据库中指定规则的灵活性。但是,似乎无法在代码中指定规则


如果更大的灵活性是一项要求(不一定需要业务分析师编辑规则),那么您更喜欢这两项中的哪一项?为什么?

这与您的具体要求非常重要。”“灵活”本身不是一个好的要求,因为它是不可测量的。如果某件事情是灵活的,这是非常主观的

我不熟悉微软的商业规则引擎,所以我不能对此发表评论。不过,我对Microsoft企业库验证应用程序块(VAB)非常熟悉,它在过去一年中为我提供了很好的服务。它有几个特点,使其在我处理的情况下具有灵活性:

  • 它允许定义验证声明性(使用属性)和使用外部配置文件(在生成实体时非常有用)
  • 它包含一组可以使用的默认验证器,并且可以编写自定义验证器
  • 它允许对单个属性进行验证,并允许您将多个属性作为一个组进行比较(通过使用自验证或自定义验证程序)
  • 它允许单独验证对象以及对象图
  • 它允许您定义多个“规则集”,例如允许您定义一组硬错误和一组警告
VAB(或整个企业库)允许您编写自定义配置源(IConfigurationSource),它允许您在任何需要的地方定义业务规则。因此,从理论上讲,您可以将它们存储在数据库中,但是您必须自己编写这样的配置源,这将是相当多的工作。特别是当您希望您的业务分析师能够定义验证并使用某种编辑工具更新数据库时,它认为使用VAB来完成这项工作将非常困难

若业务人员真的需要自己编写这些规则,希望您有支持此要求的流程。例如,他们将如何测试他们的更改是否正确?您不希望业务分析师直接对生产数据库进行更改

但是请考虑一下。如果要测试这些规则,我希望这些规则不会直接在生产数据库中更改,否则您将在事后进行测试。因此,分析师将在他们自己的环境中更改规则,您可能会将新规则从该环境发布到测试环境,然后发布到验收环境,最终发布到生产环境。如果您正在执行这些步骤,您是否仍然应该使用数据库来存储这些业务规则?使用配置文件比使用数据库容易得多。部署将只是一个文件副本,而不是将多个表的内容从一个数据库复制到另一个数据库


我感兴趣的是其他人对他们熟悉的验证框架有什么看法。

@Steven-规则引擎具有一些VAB不支持的功能,如规则优先级和前向更改。我正在寻找一个功能丰富的框架,但不确定哪些VAB支持WF不支持的功能Rules@Steven-对于VAB,您在何处进行验证,例如“如果数据库中不存在此ID,则验证成功,否则不会成功”。DB访问逻辑是否作为类的一部分(可能在SelfValidation方法中)?@User102533:此注释字段太短,无法回答您的问题“复杂的DB特定验证逻辑在哪里”,但在另一个线程上写到了这一点。我希望它能回答您的问题:@Steven-是否可以在自定义验证器中获取对您正在验证的对象以外的对象的引用?如果我在DoValidate方法中为Order.Qty创建CustomValidator,那么用例可能是“确保Order.Qty>10,此时Employee.Status='Premium'”。如何获取对Employee对象的引用?@User102533:这取决于。为订单创建自定义验证器时,您可以访问Qty和Customer。如果需要基于上下文进行验证,请阅读本文:。