21

我在一个应用程序上工作,其核心是一组非常复杂的 Web 表单。这种复杂性的根源

  1. 规模,有些表格包含大约 50 页,每页最多 30 个问题
  2. 复杂的规则,例如如果用户对问题 4 回答“否”,则问题 5-15 不适用,因此应从表格中删除

目前我们对表单使用Angular Schema Form,但它没有提供一种引人注目的方式来管理表单字段之间的大量复杂规则。

我在基于规则的编程方面没有太多经验,但在我看来,这可能会提供一种更好的方式来管理表单字段之间的规则。例如,使用基于规则的方法,我们可以定义与每个表单字段关联的规则,并且规则引擎可以使用这些规则来决定接下来要显示哪些字段。使用我们当前的方法,我们使用大量几乎不可能测试和维护的命令式 JavaScript 来实现这一点。

如果有人有开发如此复杂的网络表单的经验,我很想听听他们的经验,例如他们可以推荐的工具/库。我们当前的堆栈基于 JDK(Java、Groovy、Grails)和 JavaScript(Angular、Node),因此在这些平台上运行的工具/库/框架将特别有趣。

4

2 回答 2

1

我有为这种类型的流程构建解决方案的经验 - 诚然,一次不是 50 个表单页面,但我的用例确实有很长的技术表单,其中根据较早的答案隐藏了一组问题。

我为专家编写了一个设计时工具来设置问题。该工具将问题呈现为树,并允许将问题分组到块中,以使作者更容易管理显示/隐藏规则。这些规则被编码为简单的“Q10 > 123”,意思是当 Q10 的答案大于 123 时,然后显示这个问题(或问题块)。问题所需的答案可以是文本输入、下拉选择等。

作者设计时活动的结果是问题树、问题详细信息(提示、强制、类型、选项等)和可见性规则的 XML 定义。

在运行时,我将它提供给嵌入在网页中的 JavaScript“播放器”。玩家使用问题定义、建立模型、创建所需的显示元素等,生成呈现页面所需的 HTML。这包括根据这些规则运行可见性检查。此检查在给出答案时再次运行,以便可以根据给定答案隐藏/显示任何相关问题。

在用户完成表单时,我们通过向服务器发布隐藏表单将数据保存到数据库。该表格包括每个问题的“isVisible”标记,该标记也存储在数据库中,作为一种能够快速显示结果答案并知道哪些是隐藏的方法,如果它们隐藏在表格末尾那么当结果显示、打印或通过电子邮件发送等时,它们应该被隐藏。

我最初是在 VBScript 中构建的(IE 是当时的浏览器!),然后将其移至 JavaScript,最近使用 JQuery 进行了更新。它已经被使用了数百万次,并且看起来很健壮且实用。

总之,您需要一个工具来帮助您的专家为表格设置问题;您需要一种方法来保存和传输该信息;您需要一种为用户处理表单和问题定义的方法;您需要一种方法来存储给出的答案;并且您需要一种方法来快速重新显示结果,而无需重新计算所有问题的显示/隐藏。

于 2016-11-13T18:56:24.533 回答
-1

如果您想使用规则引擎,请问自己这些问题。如果答案适用,请使用它。

你的算法是一堆计算还是涉及到主要的决策能力?

  • 如果您有很多条件或者您的规则不是很表格(您可能能够将规则存储在数据库中),您甚至可以采用混合方法,但维护起来有点困难,因为您在不同的部分有规则,但更容易编程,因为你只是在编程特定的规则。

你的决定有多复杂?

  • 如果您有多个条件语句

  • 您可以清楚地定义规则

你的规则有多不稳定?

  • 你还不知道你的规则,或者你的规则需要灵活并且会随着时间而改变。

您的算法是否需要自定义 tweeking?

  • 如果您不需要为性能之类的事情进行调整,请使用规则引擎
于 2016-11-09T18:00:26.563 回答