/ / Por que as variáveis ​​globais (dollar-sign $) não são usadas? - rubi sobre trilhos, rubi, rubi sobre trilhos-3

Por que as variáveis ​​globais (dollar-sign $) não são usadas? - rubi sobre trilhos, rubi, rubi sobre trilhos-3

Estou hackeando Rails há um ano e meio agora, e eu gosto bastante disso :)

Nos trilhos, fazemos um monte de uso de variáveis ​​locais, variáveis ​​de instância (como @user_name) e constantes definidas em inicializadores (como FILES_UPLOAD_PATH). Mas por que ninguém usa variáveis ​​"dolarizadas" globais ($) como $dynamic_cluster_name?

É por causa de uma falha de design? O desempenho está relacionado? Uma fraqueza na segurança?

Respostas:

40 para resposta № 1

É por causa do problema de falha de design?

Desenhar... falha? Isso é uma benção de design, benção de design, mérito de design, tudo menos a falha! Variáveis ​​globais são ruins, e eles são especialmente ruim em aplicativos da Web.

A sensação de usar variáveis ​​globais está mantendo - e mudando - o "estado global". Funciona bem em um simples script single-threaded (não, não bem, funciona horrível, mas, ainda assim, funciona), mas em aplicativos da web apenasnão. A maioria dos aplicativos da Web executa back-ends simultâneos: isto é, várias instâncias do servidor que respondem a solicitações por meio de um proxy e um balanceador de carga comuns. Se você alterar uma variável global, ela será modificada somente 1 das instâncias do servidor. Essencialmente, uma variável de sinal de dólar não é mais global quando você está escrevendo um aplicativo web com trilhos.

A constante global, no entanto, ainda funciona, porque são constantes, não mude, e ter várias instâncias deles em servidores diferentes é OK, porque eles sempre serão iguais lá.

Para armazenar um mutável estado global, você tem que empregar maisferramentas sofisticadas, como bancos de dados (SQL e noSQL; ActiveRecord é uma ótima maneira de acessar o banco de dados, usá-lo!), backends de cache (memcached), até mesmo arquivos simples (em casos raros, eles são úteis)! não trabalhe.


5 para resposta № 2

As variáveis ​​globais geralmente são um sinal de design incorreto e podem ser uma fonte de erros devido a problemas de simultaneidade. As constantes globais não têm esses problemas.

Em vez de usar uma variável global, considereusando um singleton ou uma variável de classe. Dessa forma, você pode limitar o acesso ao estado compartilhado a uma pequena parte do seu código, facilitando evitar esses problemas.


1 para resposta № 3

Eu já usei uma vez para manter as conexões FTP vivasatravés do AJAX pede um cliente FTP baseado na web. Isso permitiu que o usuário interagisse repetidamente com o site FTP sem ter que se reconectar a cada vez para cada ação executada.

Portanto, um bom benefício dos globais em Ruby é que você pode armazenar com segurança objetos de tipo de recurso neles.


0 para a resposta № 4

A aparente falta de uso global é um indicadorda falha do conceito de variável global, não da implementação de ruby. Na verdade, eu nem sabia que a ruby ​​tinha uma sintaxe global. Eles não são necessários, e eu nunca os procurei. Um bom código de rubi nunca precisa deles.