language-agnostic - 使用大量静态方法是一件坏事吗?

标签 language-agnostic static-methods

当类不需要跟踪内部状态时,我倾向于将类中的所有方法声明为静态。例如,如果我需要将 A 转换为 B 并且不依赖于某些可能变化的内部状态 C,我会创建一个静态转换。如果我希望能够调整内部状态 C,那么我会添加一个构造函数来设置 C,并且不使用静态转换。

我阅读了各种关于不要过度使用静态方法的建议(包括 StackOverflow 上的建议),但我仍然无法理解上述经验法则有什么问题。

这是一个合理的方法吗?

最佳答案

常见的静态方法有两种:

  • “安全”的静态方法将始终为相同的输入提供相同的输出。它不修改全局变量,也不调用任何类的任何“不安全”静态方法。本质上,您正在使用一种有限的函数式编程——不要害怕这些,它们很好。
  • “不安全”的静态方法会改变全局状态、全局对象的代理或其他一些不可测试的行为。这些都是过程式编程的倒退,如果可能的话应该进行重构。

“不安全”静态有一些常见的用途——例如,在单例模式中——但要注意,尽管你给它们起了任何漂亮的名字,但你只是在改变全局变量。在使用不安全的静力学之前请仔细考虑。

关于language-agnostic - 使用大量静态方法是一件坏事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/752758/

相关文章:

c++ - 从静态方法访问类的私有(private)成员变量

c++ - 尝试使用指向成员函数的指针时出现转换问题

python - 速度静态方法与类方法

math - float 学有问题吗?

language-agnostic - 比无限循环+方 block 更好的游戏循环?

c# - 在单元测试中将 DI 与没有依赖关系的模块/类一起使用是否有令人信服的理由?

facebook - 如何为移动应用程序实现安全的 Facebook 登录/注册/连接 Web 服务?

algorithm - 我需要一种算法来查看 3 个列表并找到独特的项目

javascript - 在 Typescript 中访问对象类的静态方法?

java - Java中静态方法不支持动态多态的原因