3

私は最近、さまざまなクライアント側のJavaScriptライブラリ/フレームワークを行き来しています。私はバックボーンが好きです。ExtJsのファンではありません。等。

Rails 3とにかく、サーバー側( )とクライアント側の両方で検証ロジックを定義する必要があるという点で、それらすべてに1つの大きな問題があるようです。さらに、モデル定義(AR Objectsおよび `JSオブジェクト')でも同じことを行う必要があります。次に、両方の場所でもビジネスルールを定義する必要があります。

私は常に2つの並行アプリケーションを開発しているようです。

これは主観的な質問だと思いますが、専任のJSや専任のRubyの人を雇う余裕のない小さな一人のチームにとって、私の解決策は何ですか?

私は頭を悩ませていて、何かが足りないかもしれませんが、この問題の単一の解決策を見つけることができません。

ローカルJSオブジェクトを生成するRubygemを書くことを考えました。したがって、少なくとも私のビジネスオブジェクトは同じになります。しかし、これは怖いように聞こえます。特に、すべての属性がクライアント側にあるとは限らないためです。

この問題についてどう思いますか?私はそれと一緒に暮らす必要がありますか?

4

2 に答える 2

5

それはあなたがただ一緒に暮らさなければならないものだと思います。問題の性質について考え、クライアントとサーバーの両方のデータ検証を行う理由を考えると、ユーザーエクスペリエンスを低下させたり、アプリケーションを危険にさらしたりせずに、現在この問題を回避する方法はないという結論に達することができます。

電車で全国に商品を発送しているようなものだと考えてください。ソースの場所で、誰かがログをチェックして、注文のすべてが列車に含まれていること、および商品が損傷していないことを確認します。目的地で、別の人が、注文したすべての荷物を受け取ったこと、および損傷がないことを確認します。

これらの検証手順の1つをスキップするとどうなりますか?「サーバー」側の検証なしで不完全な出荷を送信するリスクがあります。もう一方の端で到着した貨物を検証せずに、誰かが列車を乗っ取って偽造品の束を交換した場合、商品が販売されて警官があなたのドアに来るまで、あなたはそれを知ることができません。

列車が1つの場所から別の場所に移動するのにかかる時間(および費用)は、どちらかの端でエラーが発生すると別の列車を送信する必要があるため、入荷と出庫の両方の商品を検証するインセンティブを生み出します。

確かに、この比喩は一種のストレッチですが、うまくいけば、あなたは絵を手に入れることができます。両端で検証が必要です。

于 2012-04-23T15:30:59.040 に答える
1

これは、それらが重複しない2つの「閉じたドメイン」であるためです。サーバー上のコード、クライアント上のコード。クライアントでPHP/Ruby / Python / OtherServerLanguageを実行したり、サーバーでJavascriptを実行したりすることはできません。えっ、ちょっと待って !できます!

私は3種類の解決策を見ます:

  • 2つのドメインのいずれかのルールを生成するツールを構築します。例:rubyコードを取得/解析し、それに関連するJavascript(モデル、検証ルールなど)を生成します。
  • ツールを使用して1つのサーバー側言語をJavascriptに変換します。そこにはたくさんのhttps://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-c ​​ompile-to-JSがあります。
  • サーバーにJavascriptをもたらすnode.jshttp : //nodejs.org/に似たものを使用して、両方のドメインに同じ言語を使用します。そうすれば、コードを1回記述してサーバー側とクライアント側で実行できるため、コードベースを再利用できます:)このパターンでは、小さな独立したモジュールですべてのコードを分離するように求められます。
于 2012-04-23T15:21:36.897 に答える