管理复杂的 Web 表单
Posted
技术标签:
【中文标题】管理复杂的 Web 表单【英文标题】:managing complex web forms 【发布时间】:2017-03-19 22:57:53 【问题描述】:我正在开发一个应用程序,其核心是一组非常复杂的网络表单。这种复杂性的根源
-
规模,有些表格大约有 50 页,每页最多 30 个问题
复杂的规则,例如如果用户对问题 4 回答“否”,则问题 5-15 不适用,因此应从表单中删除
目前我们对表单使用Angular Schema Form,但它没有提供一种有效的方式来管理表单字段之间的大量复杂规则。
我对@987654322@ 没有太多经验,但在我看来,这可能会提供一种更好的方式来管理表单字段之间的规则。例如,使用基于规则的方法,我们可以定义与每个表单字段关联的规则,并且规则引擎可以使用这些规则来决定接下来要显示哪些字段。使用我们当前的方法,我们通过大量几乎不可能测试和维护的命令式 javascript 来实现这一点。
如果有人有开发如此复杂的网络表单的经验,我很想听听他们的经验,例如他们可以推荐的工具/库。我们当前的堆栈基于 JDK(Java、Groovy、Grails)和 JavaScript(Angular、Node),因此在这些平台上运行的工具/库/框架将特别受关注。
【问题讨论】:
你有比较过使用角度形式吗? @charlietfl 不,我知道 formly 是另一个非常流行的 Angular 表单开发库,但我不知道与 Angular Schema Form 相比的优缺点 如果不更详细地了解问题,很难真正评估什么会有所帮助,但在我看来,您可能会受益于每个 "form" 的多条路线,其中每条路线路由是由决策树确定的自己的形式,每个子路由都绑定到一个共享服务。可能还想尝试测试角度形式,看看它是否可以帮助您获得更多有益于您的功能 试试看strategy pattern
@IvanChaer 有问题的表格不是调查
【参考方案1】:
我有为此类流程构建解决方案的经验 - 诚然,一次不是 50 个表单页面,但我的用例确实有很长的技术表单,其中根据早期答案隐藏了一组问题。
我为专家编写了一个设计时工具来设置问题。该工具将问题呈现为树,并允许将问题分组到块中,以使作者更容易管理显示/隐藏规则。这些规则被编码为简单的“Q10 > 123”,意思是当 Q10 的答案大于 123 时,然后显示这个问题(或问题块)。问题所需的答案可以是文本输入、下拉选择等。
作者设计时活动的结果是问题树、问题详细信息(提示、强制、类型、选项等)和可见性规则的 XML 定义。
在运行时,我将它提供给嵌入在网页中的 JavaScript“播放器”。玩家使用问题定义、建立模型、创建所需的显示元素等,生成呈现页面所需的 html。这包括根据这些规则运行可见性检查。给出答案后会再次运行此检查,以便根据给定答案隐藏/显示任何相关问题。
在用户完成表单时,我们通过向服务器发布隐藏表单将数据保存到数据库。该表格包括每个问题的“isVisible”标记,该标记也存储在数据库中,作为一种能够快速显示结果答案并知道哪些是隐藏的方法,如果它们隐藏在表格末尾那么当结果显示、打印或通过电子邮件发送等时,它们应该被隐藏。
我最初是用 VBScript 构建的(IE 是当时的浏览器!),然后将其移至 JavaScript,最近使用 JQuery 进行了更新。它已经被使用了数百万次,并且看起来很健壮且实用。
总之,您需要一个工具来帮助您的专家为表单设置问题;您需要一种方法来保存和传输该信息;您需要一种为用户处理表单和问题定义的方法;您需要一种方法来存储给出的答案;并且您需要一种方法来快速重新显示结果,而无需重新计算所有问题的显示/隐藏。
【讨论】:
【参考方案2】:如果您想使用规则引擎,请问自己这些问题。如果答案适用,请使用它。
你的算法是一堆计算还是涉及到主要的决策能力?
如果您有很多条件或者您的规则不是很表格(您可能可以将规则存储在数据库中),您甚至可以采用混合方法,但维护起来有点困难,因为您在不同的部分都有规则,但更容易编程,因为您只需要编写特定的规则。您的决定有多复杂?
如果您有多个条件语句
可以明确定义规则
你的规则有多不稳定?
您还不了解自己的规则,或者您的规则需要灵活并且会随着时间而改变。您的算法是否需要自定义调整?
如果您不需要为性能等事情进行调整,请使用规则引擎【讨论】:
以上是关于管理复杂的 Web 表单的主要内容,如果未能解决你的问题,请参考以下文章
用于用户管理的 ASP.NET Web 表单应用程序中的 Advantage Database Server (10.1)
使用Springboot进行表单管理 - 当用户选择预先输入时自动填充表单