Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于业务规则验证的框架/设计模式_Java_Design Patterns_Frameworks_Drools_Spring_Groovy_Jruby - Fatal编程技术网

Java 用于业务规则验证的框架/设计模式

Java 用于业务规则验证的框架/设计模式,java,design-patterns,frameworks,drools,spring,groovy,jruby,Java,Design Patterns,Frameworks,Drools,Spring,Groovy,Jruby,对于可能有1000次以上商业规则验证的应用程序,我应该使用什么样的框架/设计模式 我正在研究的系统类型包括许多允许用户输入的输入表单。每个输入表单都有不同的部分 i、 e.表格A有A/B/C/D部分。表格B有B/C/D部分 其中一些业务规则验证对于这两种表单都是通用的,我正在研究一种重用规则的方法 如何构建健壮的业务规则验证框架 框架是专门为评估业务规则而设计的 框架允许使用动态语言(如和)编写bean。你可以很容易地插上插头 似乎很合适:将每个规则作为一个单独的策略实施,并一个接一个地运行它

对于可能有1000次以上商业规则验证的应用程序,我应该使用什么样的框架/设计模式

我正在研究的系统类型包括许多允许用户输入的输入表单。每个输入表单都有不同的部分

i、 e.表格A有A/B/C/D部分。表格B有B/C/D部分

其中一些业务规则验证对于这两种表单都是通用的,我正在研究一种重用规则的方法

如何构建健壮的业务规则验证框架

  • 框架是专门为评估业务规则而设计的

  • 框架允许使用动态语言(如和)编写bean。你可以很容易地插上插头

  • 似乎很合适:将每个规则作为一个单独的策略实施,并一个接一个地运行它们

  • 可以使用类似的模式:每个规则要么失败,要么成功,并将控制权传递给下一个规则


    • 实现业务规则的一个好模式是。它是策略、组合和解释器的组合,可以实现参数化和易于组合的规则。如果可以的话,一定要看看Fowler和Evans的《领域驱动设计》(Domain Driven Design)一书。

      这个问题太宽泛了。。你考虑过什么?1000次验证还是1000条规则?规则有多复杂?他们多久更换一次?他们需要多快改变?变更是否具有追溯力?规则和验证的组合。它们几乎不会改变,对于每个规则,我需要向用户返回一条错误消息。当你提到“将每个规则作为一个单独的策略实施”时,希望你不是在为OP提到的1000个验证中的每一个建议一个策略类。这将是一个相当大的类爆炸,对吗?或者,您可能是指每个规则都有一个单独的类实例。@Brady:实际上,我指的是一个规则的单独类。然后,每个规则都可以有一个名称,进行单元测试并放入有意义的包中。还可能会泛化一些规则,以便一个具有不同设置的类可以用于多个规则。最后,类在像和这样的语言中是便宜的(wrt.行代码)。还有什么选择呢?一个包含数千行规则代码的单一类(假设一条规则可以容纳1-2行?)Tomasz,我明白你的意思,我认为你提到的组合是最好的,特别是用一个或几个类概括许多规则。当然,我不想看到一个凌乱的类,但从另一方面来说,我也不认为1000个类是最优的。@TomaszNurkiewicz 1000个类看起来不像是解决这些问题的一种可能的尝试?@optimus:我相信这些规则中有很多可以重用,所以你最终会得到几十个,可能有上百个可参数化的规则可以一起构建。对于每个规则,我都需要返回相应的错误消息。规范模式有何帮助?规范方法还可以返回错误消息以及成功标志。您可以将它们打包到一种“operation result”类中,并从
      IsSatified
      方法返回。创建另一个OperationResult类,该类可能有一个包含所有适当消息的列表?是的,该类封装了业务规则逻辑的结果;它是否成功以及它的所有结果消息。对于每个规则,我将有一个规范类?