初始化需要网络调用的对象的最佳实践 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
例如,我有一个名为 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