1

AJAX を多用する Web アプリケーションを開発しています。サーバーは、応答のさまざまな部分を連結するために、配列で応答することがよくあります。

これらの配列のキーを次の 2 つの中で処理するための最良の解決策は何だろうか (JSON のエンコードとデコードは示されていません)。

ストリングス

このソリューションは、特に JavaScript では読みやすいですが、非常に脆弱で保守が困難です。

PHP :

<?php
return array(
    'key_name_1' => 'foo',
    'key_name_2' => 'bar'
);
?>

JavaScript :

var result = ajax(...);
alert(result.key_name_1);

定数

これは確かな解決策であり、短いキーと数値キーを使用できますが、重くて読みにくいです (リフレクションを使用して JavaScript 定数の生成を自動化することは、私の場合は受け入れられる解決策ではなく、とにかくすべての欠点を解決するわけではありません)。 .

PHP :

<?php
class Answer
{
    const CONSTANT_1 = 1;
    const CONSTANT_2 = 2;
}

return array(
    Answer::CONSTANT_1 => 'foo',
    Answer::CONSTANT_2 => 'bar'
);
?>

JavaScript :

Answer.CONSTANT_1 = <?php echo Answer::CONSTANT_1; ?>
Answer.CONSTANT_2 = <?php echo Answer::CONSTANT_2; ?>

var result = ajax(...);
alert(result[Answer.CONSTANT_1]);

あなたによると、最良の選択は何ですか?

4

2 に答える 2

1

キー名の変更は、それらを使用するコードでも実行する必要があるため、文字列ソリューションは脆弱だと思います。

この結論は正しくなく、保守不可能なコードにつながります。

次のPHPデータ構造を検討してください。

array(
 MyClass::FIELD1 => "my field1 value",
 MyClass::FIELD2 => "my field2",
 MyClass::FIELD3 => "field 3 is awesome",
);

class MyClass {
  const FIELD1 = "field1";
  const FIELD2 = "field2";
  const FIELD3 = "field3";
}

(提案されたユースケースのように)の代わりに新しいフィールドを使用したいとしfield1ます-これを次のように呼びますnewfield

class MyClass {
  const FIELD1 = "newfield";
  ....
}

これで、コードは一貫性のない状態になります。変数の名前は、その値とは相関関係がなくなりました。FIELD1定数は基本的、それが表すフィールドの周りにあります。

1年後にこのコードを調べる新しいプログラマーを想像してみてください。彼女は存在を知ってnewfieldおり、それにアクセスしたいと考えています。しかし、単に入力する代わりに、result.newfield彼女はを入力する必要がありますresult[Answer.FIELD1]。そして、彼女がアクセスしたいときはいつでも、newfieldこのマッピングを覚えて適用するという精神的なオーバーヘッドがあります。しかし、これは数百のフィールドを持つ大規模なアプリケーションであり、ほとんどがこのように誤った方向に向けられています。これは脆弱で保守不可能なコードです。

定数は、本質的に定数である値にのみ使用する必要があります。円周率のような数学定数を格納する標準的な例:

class MyMathClass {
  const PI = 3.141592;
}

定数は、揮発性のデータ構造(フィールド名は定期的に変更される)を維持するために利用できる最悪のプログラミングツールの1つです。

于 2013-03-16T19:12:22.117 に答える
0

JavaScript をエコーアウトすると、実際には一定ではなくなります。コードを後で読みやすくする場合は、個人的に文字列を使用します。なぜこれが壊れやすく、維持するのが難しいのでしょうか? 定数で読み取り可能にする必要がある場合は、常に定数文字列を定義できます。数字や単語をキーとして使用する方が適切かどうかは、これ以上の情報がないとわかりません。

于 2013-03-16T18:06:35.280 に答える