使用静态变量存储全局变化信息是一种好习惯吗?

Lou*_*hys 7 c# java oop static

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

而不是传递参数,以便被调用的类可以访问它.

Jon*_*eet 7

这通常不是一个好主意,不是......它绝对可以简化某些事情,但它会使测试变得更加困难(例如,意味着您无法并行运行测试).

日志记录等一些方面通常都是这样实现的,但我倾向于尝试不这样做.依赖注入使测试方面的生活更加简单.(当你需要将依赖关系传递给类Foo时,将它传递给Bar,然后将其传递给Baz等,这会变得很痛苦.我认为在依赖注入方面我们仍然没有"那里".我认为在范围/生命周期方面更先进的东西作为语言的一部分是有用的,但我们会看到......我不能在C#中看到它发生,请注意.)


Pét*_*rök 6

显然你的意思是单身人士.答案是:一般来说这不是一个好主意,因为它会导致很难跟踪代码中的依赖关系.这反过来又使您的代码难以理解,维护和扩展.更重要的是,它使单元测试变得困难.

如果方法正在使用全局对象,除了查看源代码之外,您无法知道它.但是,如果该方法仅使用其参数和类成员,则可以通过查看其签名和封闭类的定义来了解其依赖关系.

为使用全局对象的方法设置单元测试要比"普通"方法困难得多.此外,在每次测试之后,有人会忘记重置全局状态,这会导致全局状态转移到其他单元测试.这使得您的测试秘密依赖于执行顺序,这可能会产生奇怪的测试结果.