【问题标题】:Are static classes and methods bad? Global variables frowned upon?静态类和方法不好吗?全局变量不赞成?
【发布时间】:2011-06-01 20:19:00
【问题描述】:

我有一个具有数据库连接性的应用程序,尽管显然有与我的数据库中的数据相对应的对象,但我发现我所有的数据处理方法都可以是静态的,因为实际上不需要对象的实例作为我的类只是对数据进行操作并吐出一些东西,不需要在方法范围之外存储任何东西。如果我可以将方法或类设为静态,我应该这样做吗?

我还为通用(单个实例)“全局数据”使用实用程序单例类。我想有一个好的设计,但是这些都不被接受吗?

让我举个例子说明我在做什么。我使用静态方法从我的数据库中加载一些数据,以将其放入我的 Singleton 类中的全局变量(自定义对象的列表)

所以我的单例类有类似的东西

List<MyCustomObject> SomeList

我的静态类有

static void LoadData()
foreach(data in database something or other)
singletonClass.SomeList.Add()

所以上面的代码可能会将数据库中的一些记录加载到 SomeList 中,其中 SomeList 中的每个项目都是 MyCustomObject 类型,其中包含一条信息记录。

这是一个好的实现吗?你会这样编码吗?

然后在我的表示层中,我将调用另一个静态方法类,以从单例类中获取所需格式的数据。

感觉不是很糟糕。但我真的想不出如何以另一种方式来做。

【问题讨论】:

标签: class methods static


【解决方案1】:

请允许我引导您阅读关于此主题的优秀文章:Singletons are Pathological Liars

问题在于调用LoadData() 函数的需要并不是不言而喻的。将您的情况与文章中描述的情况进行比较,我想您会发现一些相似之处。

【讨论】:

  • 很好——是的,我认为这是给定代码的最大问题。
【解决方案2】:

Statistics 和 singletons 在某种程度上是不受欢迎的。但这与以“但是”开头的句子相同——过度使用时不好,但有时它是最好的。

在您的示例中,为什么有单独的类,一个是单例,一个是静态的?单例在许多方面等同于只有静态数据和方法的类。如果您已经有一个单例,我会说您应该添加将数据加载到其中的方法,而不是添加到单独的类中。例如,如果您拥有所有存储的数据类型共有的实用程序代码,则具有静态方法的类会更合适。

(另外,我不会太担心什么是 OOPey,什么不是。在 OOP 原则的盲目服务中过度设计可能是一个严重的问题,作为一个不得不涉足 Eclipse 代码库的人来说......)

【讨论】:

    【解决方案3】:

    单例是一个,但静态是另一个非常大的。

    不管是不是OOP,静态变量都有很多缺点,但编码的便利性不大。

    • 无法确定准确的分配时间、寿命
    • 在多线程中不能很好地工作
    • 程序扩展的未来问题

    ...

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 2011-08-13
      • 2012-05-14
      • 2011-01-17
      • 2011-05-12
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多