2012-04-23 13 views
3

最近私は、クライアント側のさまざまなJavaScriptライブラリ/フレームワークで往復しています。私はバックボーンが好きです。 ExtJsのファンではありません。等なぜサーバーサイドモデル、検証などとクライアント側の間にこのような切断がありますか?

とにかく、私はサーバ側(Rails 3)とクライアント側の両方で検証ロジックを定義しなければならないという点で1つの巨大な問題を抱えているようです。さらに、私はモデル定義(AR Objectsと `JS Objects ')と同じことをしなければなりません。次に、両方の場所でビジネスルールを定義する必要があります。

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

私はこれが主観的な質問ですが、私たちにとっては、専用のJS人とRuby専用の人がいない小規模の1チームですが、私のソリューションは何ですか?

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

ローカルのJSオブジェクトを生成するRubyの宝石を書くことを考えました。だから少なくとも私のビジネスオブジェクトは同じだろう。しかし、これは恐ろしい音です。特に、私はすべての属性をクライアントサイドでは望んでいない可能性があります。

この問題に関するご意見はありますか?私はちょうどそれと一緒に生きなければならないのですか?

+0

特定のデータ型に応じて何かが有効かどうかを判断し、そのページへのAJAX呼び出しを行うページがありますか?とにかくそれは私がやることです。 – Snuffleupagus

+0

@ user1090190これは解決策ですが、検証ルールがクライアントコードのすぐ上に実装されているときに提供される「インスタント」フィードバックはありません – pomeh

+0

@pomehサーバーは余分なヒットを必要としますが、エンドユーザーはハードなポストバック(これはJS側の検証のポイントです、それはありませんか?) – Snuffleupagus

答えて

5

Iそれはあなたがちょうど生きなければならないものだと考えてください。問題の性質と、クライアントとサーバーの両方のデータ検証を行う理由について考えてみると、ユーザーエクスペリエンスを低下させたり、アプリケーションを危険にさらすことなく、現在のところ周囲に方法がないことがわかります。

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

これらの検証手順の1つをスキップするとどうなりますか? 「サーバ」側の検証なしに不完全な出荷を送信するリスクがあります。誰かが電車を乗っ取って多数の偽造品を取り替えると、商品が売られて警官があなたのドアに来るまで、それについて調べることはできません。

電車がある場所から他の場所に移動するのにかかる時間(および費用)は、どちらかの端のエラーが別の電車を送る必要があるため、着信商品と発信商品の両方を検証するインセンティブを作成します。

確かに、このメタファーは一種のストレッチですが、うまくいけばあなたはその絵を手に入れます。我々はの両端にのバリデーションが必要です。

+2

私はあなたに同意するが、これは彼の質問ではないと思う。 「仕事を2回するのを避ける方法」についての詳細です – pomeh

+0

@pomehあなたは正しいと私は知っていましたが、多くの人々がこの問題に不満を抱いていて、なぜそれが必要なのか理解できないかもしれないと感じました。それをクリアするには刺す。 – Chris

1

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

  • :(モデルあなたのRubyコードを解析/取得、およびそれに関連するJavascriptを生成し、There you can !

    私はソリューションの3種類を見ます検証ルールなど)、

  • はJavaScriptに1台のサーバーサイドの言語に変換するツールを使用して、トンがそこにありますhttps://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
  • にJavascriptを持っているhttp://nodejs.org/をNode.jsのために何か似て、両方のドメインで同じ言語を使用サーバ。こうすることで、コードを一度書くだけでサーバー側とクライアント側を実行できるので、コードベースを再利用することができます:)このパターンは、小さな独立したモジュールですべてのコードをデカップリングすることを要求します。
関連する問題