为什么服务器端模型,验证等与客户端之间存在这种脱节?

时间:2012-04-23 15:12:11

标签: javascript design-patterns client-side server-side

我最近在不同的客户端JavaScript库/框架上反复蹦蹦跳跳。我喜欢Backbone。不是ExtJs的粉丝。等

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

似乎我总是开发两个并发应用程序。

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

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

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

您对此问题有何看法?我只需忍受吗?

2 个答案:

答案 0 :(得分:5)

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

想想看,就像你在火车上发送一批货物到全国各地。在源位置,有人检查日志以确保订单中的所有内容都已包含在列车中,并且没有任何货物损坏。在目的地,另一个人检查他们已收到他们在装运中订购的所有物品,并且没有任何损坏。

如果您跳过其中一个验证步骤会怎样?如果没有“服务器”端验证,您可能会发送不完整的货件。如果没有验证另一端的进货,如果有人要劫持火车并换掉一堆假货,那么在货物售完并警察到你家门口之前你就不会发现它。

火车从一个地方到另一个地方所需的时间(和费用)激励我们验证进出货物,只是因为任何一方的错误都需要发送另一列火车。

不可否认,这个比喻有点延伸,但希望你能得到这样的结论。我们需要验证两端。

答案 1 :(得分:1)

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

我看到了三种解决方案:

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