gpt4 book ai didi

ruby-on-rails - 在 ROR 3.0 中使用全局变量是一种好习惯吗

转载 作者:行者123 更新时间:2023-12-04 06:00:04 26 4
gpt4 key购买 nike

在需要更高安全性的大型项目中使用全局变量是否是好的做法(我读到的一些地方不是 DRY)如果没有那么请解释为什么?提前致谢

最佳答案

无论在什么地方使用全局变量,一般都是bad .

为什么在不必要时应避免使用全局变量

  • 非局部性——当单个元素的范围有限时,源代码最容易理解。程序的任何部分都可以读取或修改全局变量,因此很难记住或推断出每种可能的用途。
  • 无访问控制或约束检查——全局变量可以由程序的任何部分获取或设置,并且任何关于其使用的规则都可以很容易地被破坏或遗忘。 (换句话说,get/set 访问器通常比直接数据访问更可取,对于全局数据更是如此。)推而广之,缺乏访问控制极大地阻碍了在您可能希望运行不受信任的代码的情况下实现安全性(例如使用第 3 方插件)。
  • 隐式耦合——具有许多全局变量的程序通常在其中一些变量之间以及变量和函数之间存在紧密耦合。将耦合项目分组为内聚单元通常会产生更好的程序。
  • 并发问题——如果多个执行线程可以访问全局变量,则同步是必要的(但往往被忽视)。当使用全局变量动态链接模块时,即使在数十个不同上下文中测试的两个独立模块是安全的,组合系统也可能不是线程安全的。
  • 命名空间污染——全局名称随处可见。当您认为自己正在使用本地(通过拼写错误或忘记声明本地)时,您可能会不知不觉地最终使用全局,反之亦然。此外,如果您必须将具有相同全局变量名称的模块链接在一起,幸运的话,您将遇到链接错误。如果您不走运,链接器会简单地将所有使用相同名称的对象视为同一对象。
  • 内存分配问题 -- 某些环境的内存分配方案使全局变量的分配变得棘手。在“构造函数”具有分配以外的副作用的语言中尤其如此(因为在这种情况下,您可以表达两个全局变量相互依赖的不安全情况)。此外,当动态链接模块时,可能不清楚不同的库是否有自己的全局变量实例或是否共享全局变量。
  • 测试和限制 - 使用全局变量的源代码更难测试,因为在运行之间无法轻松设置“干净”的环境。更一般地说,由于同样的原因,使用未明确提供给该源的任何类型的全局服务(例如读取和写入文件或数据库)的源很难测试。对于通信系统,测试系统不变量的能力可能需要同时运行一个以上的系统“副本”,这会受到任何使用共享服务(包括全局内存)的极大阻碍,共享服务不作为测试的一部分提供共享.

关于ruby-on-rails - 在 ROR 3.0 中使用全局变量是一种好习惯吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12367907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com