我主要在这里寻找想法。我的团队购买一些东西以解决问题的可能性非常低,但请继续推荐任何有用的商业产品。
基本问题源于以下情况:
其他细节:
问题: 如何以一种我可以从javascript和SQL轻松评估它们的方式实现一组规则(存储在数据库中)?
规则可能如下所示:
我现在脑子里有许多可能的解决方案,但大多数都涉及编写两个解释器(一个用javascript,一个用在sql中)。虽然这不一定是可怕的,但只处理一个翻译是最好的。
此外,客户端需要在用户输入值时更新表单,因此每次用户更改答案时弹回数据库都不太可能是一个实用的解决方案。
更新/修改
我目前倾向于实现可以通过javascript直接评估的规则(包含规则的一些代码),并通过存储过程转换/处理为可以评估Oracle中规则的动态sql。 / p>
对此有何建议?
答案 0 :(得分:1)
使用JSON。
在JSON文件中定义规则 - 它可能如下所示:
[
{
name: "my_first_rule",
validation: {
common: ["required", "[0-9]+"]
// If you had rules that needed different implementations in .NET
// vs. Javascript you could set those up as separate attributes here
// i.e. js: ["some_complex_regex_or_fuction_call"],
// net: ["which_needs_to_be_different_in_.NET"]
},
{
name: "my_second_rule",
validation: {
common: ["required", "\w+"]
}
}
]
解析这些规则并使用它们来驱动前端javascript和后端.aspx
文件(或存储过程 - 以您的设置更有意义。)
如果您不仅要避免编写两组规则,还要编写两组规则解释器,然后使用Node.js或者调用嵌入式JScript解释器(或独立的Rhino / Spidermonkey环境)可能是要走的路(在客户端切换到Silverlight并在.NET中编写所有验证可能是另一种方法 - 如果你有用户然而,56K调制解调器,他们可能不会感谢您的选择。)
答案 1 :(得分:0)
每次用户进行更改时轮询数据库并不像您想象的那样不切实际,除非您的网络速度很慢。如果Google即时可以在每次输入字符时执行网络搜索,我认为每次用户回答问题时您都可以设法执行ajax调用。
答案 2 :(得分:0)
这可能是http://nodejs.org/的一个很好的用例。使用服务器端Javascript,您只需在JS中开发一次API。您可能需要在服务器或客户端上稍微扩展它,但它至少会消除部分负担。
答案 3 :(得分:0)
我认为您在评论中回答了自己的问题:
据我所知,我们的一些用户使用的是国外旧的56kbps调制解调器
如果您希望这些用户具有响应速度和速度,则必须将将逻辑加载到JavaScript文件并让客户端处理它的前期缓慢。我会远离AJAX,因为使用56kbps调制解调器回到服务器很多都不会很有趣。
答案 4 :(得分:0)
好吧,我最后使用类似这样的语法编写了一些简单的字符串替换“解析器”:
Condition: '{Question = "1" and Answer = "Y"} and {Question = "2" and Answer = "N"}',
Action: 'Hide',
Target: '3'
在数据库中,Condition,Action和Target字段是一行中包含更多有用信息的列。在javascript中,它将是一个JSON对象。
在JavaScript中用PL / SQL和Repace(/.../g)做一些简单的REGEXP_REPLACE,我可以到达我们需要的位置 - 而不会在解析器上浪费太多时间。 (正在测试的javascript对象将具有与条件中的属性匹配的属性,并且正在测试的数据库行将具有相同的列名。)
事实证明,我们最终会使用多个解释器,但通过字符串替换保持简单,这并不是很痛苦。