web-dev-qa-db-ja.com

JavaScriptとサーバー側スクリプトの混在

私は時々このようなコードを見ます(PHPとJSが混在していますが、サーバー側の言語でもかまいません):

<script>
  var data = <?php echo $bigDataStructure ?>;
  // then lots more pure js with no php mixed in which can access the data variable
</script>

これは、サーバー側のスクリプト言語からクライアントで実行されるJSにデータを渡す適切な方法のようです(dataというグローバル変数がそれ自体は目を潤す概念です)。

ただし、次のようなコードも見られます(この場合は、JSとColdFusionが混在しています)。

<script>
  if ($('#firstName').val() === <cfoutput>#query.firstName != "" ? query.firstName : query.nickName#</cfoutput>) {
    <cfif userHasPermission>
      $('#userForm').validate();
    <cfelse>
      $('#readOnlyNotice').show();
      disableForm();
      <cfif settings.auditEnabled>
        recordAccessAjax();
      </cfif>
    </cfif>
  }
</script>

jSロジックの実際の最終バージョンは動的です。私にとって、これは永遠の悪臭の沼に近づいているように感じます。豊富な赤旗。私は、この無邪気な混合が手に負えなくなり、メンテナンスの問題とデバッグの頭痛の種を生み出すのを見ることができました(そして見たことがあります)。

これに違反する特定のデザインパターンがあるかどうかと思います。または、そのような動的コードに対して行うことができる特定の議論がありますか?私が実践から離れる理由として提示することができますか?

注: 別の質問 は、それが悪い習慣かどうかを尋ねます。ここでは、これは悪い習慣だと思い、具体的な理由を探しています。他の質問への回答は、主に「悪いのか」と答えることに焦点が当てられていました。 OPの例をコーディングする他の方法の提案を追加しました。

3
jinglesthula

ここでの質問は、「なぜ」これが悪い習慣なのかということです。

一番の理由は、理解、維持、変更が難しいソフトウェアにつながるという長年にわたる経験的観察です。これらのシステムは口語的に 泥の大きなボール と呼ばれます。

これらの経験の結果として、それを確実に回避するために、いくつかの原則が開発されました。

3

これは、C#MVCフレームワークを使い始めるまで完全には理解できなかった問題です。これは必ずしも「悪い習慣」ではありませんが、MVCモデルを使用すると、読み取りだけでなく書き込みもプログラミングがはるかに容易になります。

PHP here。 でMVCフレームワークの詳細を読む)==

0
Bender Bending