2

アプリで大きなURL(多くのクエリパラメーターを含む)をどのように管理していますか?

たとえば、ebayからこのリンクを見てください(リンクをクリックしないでください。これは大きなURLの例にすぎません)。

http://www.ebay.com/sch/Cameras-Photo-/625/i.html?LH_ItemCondition=1&LH_Price=15..500%40c&rt=nc&LH_Auction=1&LH_BIN=1&_nkw=nikon&_catref=1&_clu=2&_fcid=12&_fln=1&_localstpos &_mPrRngCbx = 1&_sc = 1&_sop = 15&_stpos =&_ trksid = p3286.c0.m283&gbr = 1

あなたはたくさんのパラメータを見ることができます、それらの多くは「_f」、「_sc」などのような奇妙で短い名前を持っています。

アプリでこれらのパラメータを使用することはできません。より「読みやすい」ものに変換する必要があります。

 $readableName = $_GET['_f'];

しかし、それからあなたはたくさんの変数で終わります、そしておそらくあなたはそれらすべてを関数に必要とするでしょう、それで、すべてのクエリパラメータのための新しい変数の代わりに私たちは配列を使うことができます:

$readableParams['readableName'] = $_GET['_f']; 

しかし、その後、任意の構造を持つ大きな配列で終わるので、これらのパラメーターのVO(DTO)を次のように設定するのが最善の方法だと思います。

$filterVo = new FilterVo();
$filterVo->readableName = $_GET['_f'];

それは大丈夫ですが、そのコードをどこに置くのでしょうか?つまり、「rarequerparams」から「clearvalueobjects」に変換するのに最適な場所はどこですか?
逆のプロセスも必要なので、データを使用してVOを作成し、そのVOから正しいクエリパラメーターを使用してURLを生成できます。

VOの内部?ヘルパーURLクラス?モデルの基本クラスを表示しますか?

多くのパラメータを使用してこれらのURLをどのように管理していますか?

4

2 に答える 2

1

入力名がわかりにくいというのは興味深いことです。私は、このトピックに関連すると思う私のプロジェクトで見たものについて、一般的な意味で(PHPの詳細だけでなく)答えるつもりです。一般的なアプローチ:

  • フォーム変数は通常、オブジェクトにマップされます。これは、PHPのVOまたはJavaのBeanです。これは、変換されるHTMLフォームにコンテキストを与えるため、(私の意見では)最も読みやすい変換形式になります。
  • 多くの場合、私は、からの変換を処理するある種のFormUtilitiesHelperクラスを見てきました。ただし、これは特定のハードコードされた変換ではなく、ほとんどの変換は非常に構造化されており、一般的です。たとえば、すべてのゲッター/セッターメソッドを取り、それをフォーム名として使用します。たとえば、オブジェクトにある場合、フォームユーティリティはそれをたとえばgetUsername()に変換します。<input name="username"/>
  • オプションで、マッピングオーバーライドを介してデフォルトのマッピングをオーバーライドすることもできます。これは次の形式である可能性があります:
    • 構成ファイル。たとえば、インスタンス変数をフォーム変数にマップするXMLファイル。上記の例では、このようなマッピングは、ユーザー名インスタンス変数をuという名前のより不可解なフォーム変数にマッピングすることです。
    • Javaの注釈やC#の属性などの言語機能。言語機能により、構成ファイルなしでマッピングを作成できますが、オブジェクトのソースコード自体にインラインで作成できます。
  • 上記のフォームユーティリティを使用するfromForm(input)VO /Beanの基本クラスを持つプロジェクトを見てきました。toForm()開発者に利便性を提供するため、フォームユーティリティを処理する必要はなく、オブジェクトから呼び出して変換を処理するtoForm()だけです。fromForm(input)

上記のパターンを考えると、不可解なフォームフィールドの場合、通常は次のようになります。

  • フィールドを表すVOオブジェクトを作成します
  • マッピング構成を作成して、不可解なフィールドを論理名を持つ実際のインスタンス変数にマッピングします
  • Form Utilitiesヘルパークラスを直接使用するか、基本クラスでForm Utilitiesを使用する場合は、便利なメソッドtoForm()fromForm(input)
于 2011-09-05T23:43:48.123 に答える
0

これらのパラメータのほとんどは自動生成されます。私は多くのASP.NETアプリでこの種の動作を見てきました。そして、私はそのようなことをするために.NETが嫌いですが、そのトピックを再び始めたくありません。

ほとんどの場合、これらの追加パラメーターはドロップインモジュールによって生成されます。これらは自動化された方法で機能し、アプリに直接反映されていないこと(少なくともアプリケーションの開発者が書いている部分)を実行したり、他のタスクを支援したりします。これは、リクエスト間で状態を維持する方法です。

一方、あなたはあなたが説明するそのようなメカニズムを実装することができます。MVC環境では、このタスクはコントローラーによって処理されます。これは、多くのGETパラメーターが渡される場合にのみ意味があります。この種の練習は最初から避けてください。

于 2011-09-05T22:25:09.437 に答える