A volte vedo un codice come questo (in questo caso PHP e JS misti, ma potrebbe essere qualsiasi lingua lato server):
<script>
var data = <?php echo $bigDataStructure ?>;
// then lots more pure js with no php mixed in which can access the data variable
</script>
Che sembra un modo appropriato per passare i dati da un linguaggio di scripting lato server al JS che verrà eseguito sul client ( ignorando il fatto che una variabile globale denominata data
è di per sé una nozione strabiliante ).
Ma a volte vedo anche un codice come questo (misto JS e ColdFusion in questo caso):
<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>
dove la versione finale effettiva della logica JS è dinamica. Questo, per me, sembra che ci stiamo avvicinando allo scroscio dell'eterna puzza. Bandiere rosse a bizzeffe. Ho potuto vedere (e aver visto) questo mescolamento volgare o nullo sfuggire di mano e creare problemi di manutenzione e debug di mal di testa.
Quello che mi chiedo è se c'è un modello di design specifico che viola? O ci sono argomenti specifici che potrebbero essere fatti contro questo codice dinamico che potrei presentare come motivo per allontanarmi dalla pratica?
Nota: un'altra domanda chiede se è una cattiva pratica. Qui, presumo che sia una cattiva pratica e sto cercando ragioni specifiche per cui. Le risposte sull'altra domanda si concentrano principalmente sulla risposta "è male?" e ha aggiunto suggerimenti di altri modi per codificare l'esempio dell'OP.