3

我最近在不同的客户端 JavaScript 库/框架上来回跳动。我喜欢骨干。不是 ExtJs 的粉丝。等等。

无论如何,它们似乎都有一个大问题,因为我必须在服务器端(Rails 3)和客户端定义验证逻辑。另外,我必须对我的模型定义(AR Objects和“JS 对象”)做同样的事情。然后我也必须在这两个地方定义业务规则。

好像我一直在开发两个并发应用程序。

我知道这是一个主观问题,但是对于我们这些无法负担专门的 JS 人员和专门的 Ruby 人员的单人团队来说,我的解决方案是什么?

我正在绞尽脑汁,也许我错过了一些东西,但我找不到解决这个问题的单一解决方案。

我想写一个 Ruby gem 来生成本地 JS 对象。所以至少我的业务对象是一样的。但这听起来很可怕。特别是因为我可能不想要客户端的所有属性。

你对这个问题有什么看法?我只需要忍受它吗?

4

2 回答 2

5

我认为这是你必须忍受的东西。如果您考虑问题的性质,以及为什么我们同时进行客户端和服务器数据验证,您可以得出结论,目前没有办法在不降低用户体验或使您的应用程序面临风险的情况下解决这个问题。

想一想,就像您在火车上在全国范围内运送货物一样。在源头,有人检查日志以确保订单中的所有物品都已包含在火车上,并且没有货物损坏。在目的地,另一个人检查他们是否收到了他们在货物中订购的所有物品,并且没有任何损坏。

如果您跳过其中一个验证步骤会发生什么?您冒着在没有“服务器”端验证的情况下发送不完整货件的风险。如果不验证另一端的进货,如果有人劫持了火车并换掉了一堆假冒商品,那么在货物售出并且警察在您家门口之前,您不会发现它。

火车从一个地点到另一个地点所花费的时间(和费用)创造了验证进出货物的动力,因为任何一端的错误都需要发送另一列火车。

诚然,这个比喻有点牵强,但希望你能明白。我们需要两端的验证。

于 2012-04-23T15:30:59.040 回答
1

这是因为它们是两个不重叠的“封闭域”。服务器上的代码,客户端上的代码。你不能在客户端做 PHP/Ruby/Python/OtherServerLanguage,你不能在服务器上做 Javascript。等一下 !在那里你可以!

我看到三种解决方案:

  • 构建一个为两个域之一生成规则的工具,例如:获取/解析您的 ruby​​ 代码,并生成与之相关的 Javascript(模型、验证规则等),
  • 使用工具将一种服务器端语言转换为 Javascript,那里有很多https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-c ​​ompile-to-JS
  • 对两个域使用相同的语言,类似于 node.js http://nodejs.org/,它在服务器上引入了 Javascript。这样,您可以编写一次代码并在服务器端和客户端运行它,因此您的代码库可以被重用:) 这种模式只要求您将所有代码解耦到小的独立模块中
于 2012-04-23T15:21:36.897 回答