初始化需要网络调用的对象的最佳实践 Java

Best practice for initializing an object that requires network calls Java

例如,我有一个名为 Datastore 的对象,它需要一些变量来初始化:value1、value2 和一个键。这两个值是任意的,但是必须通过网络调用 API 来验证密钥,应该如何设置这个对象的初始化?在构造函数内部进行网络调用可以吗? setter 应该与无参数构造函数一起使用吗?建造者模式?

示例密钥验证

private int verifyKey(String key) { 
    try {
        URL url = new URL("https://api.com/verifykey/" + key);
        HttpUrlConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connection();
        //other implementation
   } catch(Exception e) {
        e.printStackTrace();
   } finally {
        //close connection
   }
   //return result
}

在大多数情况下,我认为构造函数中的代码应该尽可能简单。 首先,因为这会更容易测试它,因为这会让您的代码更易于使用。

你也应该看看 IoC pattern 谁解释了为什么你不应该在构造函数中初始化其他对象。 (或至少避免它)

并且仅使用 setter 来创建对象并不是一个好主意,因为构造函数的 arg 将让您定义使用该对象所需的最低限度。

此外,如果您想轻松地进行异步调用并在网络调用完成期间做一些事情,您可以尝试使用 java.util.concurrent.Future