Pourquoi les variables globales (dollar-signe $) ne sont-elles pas utilisées?
Je suis piratage autour des Rails pour un an et demi maintenant, et j'aime beaucoup ça! 🙂
Dans les rails, nous faisons beaucoup de l'utilisation de variables locales, variables d'instance (comme @user_name
) et des constantes définies dans les initialiseurs (comme FILES_UPLOAD_PATH
). Mais pourquoi ne pas utiliser n'importe mondial "dollarisation" des variables ($) comme $dynamic_cluster_name
?
Est-ce à cause d'un défaut de conception? Est-il lié à la performance? Une faille de sécurité?
source d'informationauteur Hartator
Vous devez vous connecter pour publier un commentaire.
Design... faille? C'est une conception de la bénédiction, de la conception boon, le design de mérite, mais tout défaut! Les variables globales sont mauvaiset ils sont surtout mauvais dans les applications Web.
Le sens de l'utilisation de variables globales est la conservation et de modification de la "état global". Il fonctionne bien dans un simple single-threaded scripts (non, pas bien, il fonctionne terriblemais, encore, des travaux), mais dans les applications web, il n'a tout simplement pas. La plupart des applications web de l'exécution de plusieurs backends: c'est à dire plusieurs instances de serveur de répondre à des demandes par le biais d'un proxy et un équilibreur de charge. Si vous modifiez une variable globale, il se modifie seulement dans un des instances de serveur. Essentiellement, un dollar signe de la variable n'est pas globale plus lorsque vous écrivez une application web avec des rails.
Globale constante, cependant, encore du travail, car ils sont des constantes, ils ne changent paset le fait d'avoir plusieurs instances d'entre eux dans les différents serveurs est OK, parce qu'ils seront toujours égaux.
Pour stocker un mutable l'état global, vous devez employer des outils plus sophistiqués, tels que des bases de données (SQL et noSQL; ActiveRecord est une très belle façon d'accéder à la DB, l'utiliser!), cache backends (memcached), même les fichiers bruts (dans de rares cas, ils sont utiles)! Mais les variables globales ne sont tout simplement pas de travail.
Les variables globales sont souvent un signe de mauvaise conception, et peuvent être une source de bugs en raison de problèmes de concurrence. Les constantes globales n'ont pas vraiment de ces questions.
Au lieu d'utiliser une variable globale, envisagez d'utiliser un singleton ou une variable de classe. De cette façon, vous pouvez limiter l'accès à l'état partagé pour une petite partie de votre code, ce qui permet d'éviter ces problèmes.
J'ai une fois utilisé pour garder les connexions FTP vivants à travers des appels AJAX pour un site web de base de client FTP. Cela a permis à l'utilisateur d'interagir à plusieurs reprises avec leur site FTP sans avoir à se reconnecter à chaque fois pour chaque action effectuée.
Donc une belle prestation de variables globales en Ruby, c'est que vous pouvez stocker en toute sécurité le type de ressource objets en eux.
Le manque apparent de l'utilisation globale est un indicateur de la faille de la variable globale de concept, pas de ruby dans la mise en œuvre. En fait, je ne savais même pas que ruby avait un $syntaxe globale. Ils ne sont pas nécessaires, et donc, je n'ai jamais regardé pour eux. Bon code ruby n'a jamais besoin d'eux.