在构造函数(java)中查询数据库?

时间:2014-09-14 07:05:34

标签: java oop

在构造函数中执行查询是一个好习惯吗?

class Foo {
  public Foo() {
    populateData();
  }

  private void populateData() {
    // query database here...
  }
}

3 个答案:

答案 0 :(得分:7)

构造函数的唯一目的是创建一个类的实例。

查询数据库的问题是操作可能失败。

此时如果你没有正确处理异常,那么你的代码就是bug的候选者。

您应该考虑使用构造函数来准备要使用的对象,这应该很快。

答案 1 :(得分:0)

如果您希望您的代码既清晰易读又可扩展,我建议您考虑Single_responsibility_principle。根据它 - 每个上下文(类,函数,变量等)应该只有一个责任,并且该责任应该完全由上下文封装。它的所有服务都应与该责任保持一致。

所以底线是你的工作方式:

public static class DbAccessor
{
    public static void setPopulatedData() {
        // query database here...
      }
}

答案 2 :(得分:0)

您可以使用延迟值。谷歌番石榴提供了一些实用程序来做到这一点 e.g。

class Foo {

    private final Spplier<Data> data = Suppliers.memoize(new Supplier<Data>() {
  public Data get() {
    // query database here...
    return data;
  };
});

  public Foo() {

  }
}