gpt4 book ai didi

java - dbHelper 的静态或实例方法?

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:36 24 4
gpt4 key购买 nike

我有以下情况,并且对 dbhelper 的实例方法或静态方法感到困惑?

  • 我们有一个 dbhelper 类,顾名思义,它可以帮助其他类使用 MySql 数据库。
  • db helper 类将由 2 个独立模块使用。Java 网络应用程序。基于 Windows 的 Java 应用

  • 目前dbhelper类中的所有方法都是实例方法dbhelper 类中有 8 个方法,其中 3 个是 webapp 和 windows app 通用的,其余仅供 webapp 使用。

  • Windows 应用可以说是 24*7 连续运行。

  • 我们的困惑是,如果我们将方法保留为实例方法,那么我们必须创建 dbhelper 类的对象,并最终将像 Windows 应用程序所使用的那样始终存在。

  • 我认为将方法保持为静态的优势是不需要对象。

注意:

我知道静态方法和实例方法是如何工作的。

Google 搜索对这个具体示例没有帮助。

最佳答案

问题太宽泛,无法给出具体答案。但一般来说,我可以用我会考虑的各种事情来回答。

首先,如果您的静态方法要将状态保存在静态类变量中,那不是好的做法。如果涉及任何状态,您肯定希望使它们成为实例方法,以便该实例的对象将保持状态。

您提到您的方法可以帮助处理数据库。他们将如何访问数据库?如果数据库没有作为方法参数之一传递,那么这意味着对数据库的引用必须存储在某个地方,我认为最好是 dbhelper 是一个存储对数据库的引用(或引用到可用于检索数据库对象的其他一些对象)作为实例字段之一。

因此,我将假设这些方法采用数据库参数,或将给您数据库对象的某个其他对象的参数。鉴于此,在考虑是否将您的方法设为静态时,我会考虑两件事。

(1) 方法因需求变化而发生变化的可能性有多大?如果有可能,那么我肯定会倾向于制作方法实例方法;事实上,我会考虑让“dbhelper”成为一个抽象类或接口(interface),并让不同的实现类在发生变化时以不同的方式实现抽象方法。在我看来,这比仅拥有一个静态类更灵活,如果业务逻辑发生变化,其代码也必须发生变化。它可以让您来回切换,甚至可以让您在运行时动态切换逻辑。

(2) 是否要模拟方法进行测试?如果您的方法访问数据库,那么您可能希望在对调用该方法的其他类进行单元测试时提供该方法的模拟版本,因为您希望能够测试它们而不必担心设置数据库访问和一切.这也将支持使 dbhelper 成为抽象或接口(interface),以便您可以在实际实现之外提供模拟实现。 (但是,一些测试平台,例如 JMockit,可以让您模拟静态方法。)

这些是导致我将方法变成实例方法的原因。如果您确定它们不适用,那么将它们设为静态方法应该没问题。

关于java - dbHelper 的静态或实例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36324485/

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