【问题标题】:Framework / Design pattern for business rule validation [closed]业务规则验证的框架/设计模式
【发布时间】:2012-06-07 20:49:53
【问题描述】:

对于可能有 1000 多个 biz 规则验证的应用程序,我应该使用哪种框架/设计模式?

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

即表格 A 有 A/B/C/D 部分。表格 B 有 B/C/D 部分

其中一些 biz 规则验证对这两种形式都是通用的,我也在寻找一种重用规则的方法。

如何构建强大的业务规则验证框架?

【问题讨论】:

  • 这个问题太笼统了。你考虑过什么?
  • 1000 个验证或 1000 个规则?规则有多复杂?它们多久更换一次?他们需要多快做出改变?更改是否具有追溯力?
  • 规则和验证的组合。它们几乎没有变化,对于每条规则,我都需要向用户返回一条错误消息。

标签: java design-patterns frameworks


【解决方案1】:

【讨论】:

  • 当您提到“将每个规则作为单独的策略实现”时,希望您不是为 OP 提到的 1000 个验证中的每一个都建议一个策略类。那将是一个相当大的班级爆炸,对吧?或者,也许您指的是每个规则的单独类实例。
  • @Brady:实际上我确实是指一个单独的规则类。然后,每个规则都可以有一个名称,进行单元测试并放入有意义的包中。也可能一些规则可以通用,以便具有不同设置的一个类可以用于多个规则。最后,在scalagroovy 等语言中,类很便宜(只需要几行代码)。什么是替代方案?具有数千行规则代码的单个类(假设一个规则可以放在 1-2 行中?)
  • Tomasz,我明白你的意思,我认为结合你提到的内容是最好的,特别是用一个或几个类概括许多规则。当然,我不希望所有人都看到一个凌乱的课程,但另一方面,我也不认为 1000 多个课程是最佳的。
  • @TomaszNurkiewicz 1000 个课程看起来不像是解决此类问题的可能尝试?
  • @optimus:我相信这些规则中的很多都可以重用,所以你最终会得到几十个甚至几百个可以一起构建的可参数化规则。
【解决方案2】:

实现业务规则的一个很好的模式是Specification pattern。它是 StrategyCompositeInterpreter 的组合,可以形成参数化且易于组合的规则。一定要看看 Fowler 和 Evans 的 original paper (pdf),如果可以的话,看看 Domain Driven Design 一书。

【讨论】:

  • 对于每条规则,我都需要返回相应的错误信息。规范模式有什么帮助?
  • 也可以从规范方法返回错误消息,以及成功标志。您可以将它们封装在一种“运算结果”类中,并从isSatisfied 方法中返回。
  • 创建另一个 OperationResult 类,它可能有一个包含所有适当消息的列表?
  • 是的,那个类封装了业务规则逻辑的结果;它是否成功及其所有结果消息。
  • 对于每条规则我都会有一个规范类?
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2014-06-30
相关资源
最近更新 更多