代码之家  ›  专栏  ›  技术社区  ›  Louis Rhys

使用静态变量来存储全局的、不断变化的信息是一种好的做法吗?

  •  7
  • Louis Rhys  · 技术社区  · 15 年前

    使用静态变量来存储不同类所需的全局的、不断变化的信息,这是一种良好的OOP实践吗?

    与传递参数以便被调用的类可以访问相反。

    9 回复  |  直到 15 年前
        1
  •  7
  •   Jon Skeet    15 年前

    不是的 通常地 好主意,不。。。它确实可以简化一些事情,但它会使测试变得更困难(例如,意味着您不能并行运行测试)。

    一些方面,比如日志记录,通常是这样实现的,但是我想 倾向 尽量不去做。依赖注入使生活更美好 许多的 更高级的范围/生命周期作为语言的一部分会很有用,但我们会看到。。。我看不到它在C本身发生,请注意。)

        2
  •  6
  •   Péter Török    15 年前

    Singletons . 答案是:这通常不是一个好主意,因为它在代码中创建了难以遵循的依赖关系。这反过来又使您的代码难以理解、维护和扩展。更重要的是,它使单元测试变得困难。

    为使用全局对象的方法设置单元测试比“普通”方法要困难得多。此外,还有一种风险,即有人在每次测试之后忘记重置全局状态,这会导致全局状态流到其他单元测试。这使得您的测试秘密地依赖于执行顺序,这会产生奇怪的测试结果。

        3
  •  3
  •   Jigar Joshi    15 年前

    静态变量通常用来表示固定值 final

    public final static String JANUARY="january";
    
        4
  •  1
  •   TheTechGuy    13 年前

    然而,这将不是一个好的OOP。

    这种方法有时的危险是,如果有人试图错误地访问和修改属性,您可能会得到一些意想不到的结果。

    但对于 私有方法 ,保持方法静态将是一个很好的做法,FxCop也建议这样做。

        5
  •  0
  •   Ragster    15 年前

    谁拥有这些信息?通常最好将信息包装到拥有它的类中,并通过该类的静态函数访问它,我相信。

    这也使得解决多线程访问问题更加容易,因为您可以将同步机制放入这些函数中来控制访问。

        6
  •  0
  •   John Pickup    15 年前

    使用静态变量会给多线程应用程序带来复杂性,因此通常认为这不是一个好主意。在单例类中包装这样的数据允许您设置合适的锁定机制来管理对共享数据的访问。

        7
  •  0
  •   Igor Konoplyanko    15 年前

    我认为更好的做法是使用包含所有可配置参数的*.properties文件。还可以实现类似单音的类 *Configurator

    如果是Java: http://commons.apache.org/configuration/index.html

        8
  •  0
  •   bragboy    15 年前

    不,尽量保持松耦合。如果希望代码作为单独的内聚实体执行,则强烈建议不要使用静态变量共享全局信息。然而,你可以用它们来计算常量值。但是,枚举在Java中是存在的。所以,我建议不要使用它们。

        9
  •  -2
  •   Grozz    15 年前

    推荐文章