我想知道通过向Web服务发出请求初始化模型是好还是坏,或者使用构造函数之后调用的另一个公共方法更好。
例如:
class Model {
ModelData data;
Model(Integer model_id) {
data = Request.getDataFromWebServices(model_id);
}
}
我想知道通过向Web服务发出请求初始化模型是好还是坏,或者使用构造函数之后调用的另一个公共方法更好。
例如:
class Model {
ModelData data;
Model(Integer model_id) {
data = Request.getDataFromWebServices(model_id);
}
}
model_id
对于Model
的工作是必需的,那么您将其放在那里是正确的。现在,您使用model_id
进行远程方法调用。远程方法调用可能需要更长时间才能执行,这使得Model
初始化所需的时间更长,并且可能由于网络原因而失败。如果API涵盖了来自网络层或实际处理的任何异常并返回一个良好的值以初始化Model
,则在我看来应该是可以的。只需记录该类由于网络访问而需要更长时间进行初始化即可。request
传递以显示模型API中的依赖关系:class Model {
final ModelData data;
Model(Request request, int model_id) {
data = request.getDataFromWebServices(model_id);
}
}
class Model {
static Model createModelFromWebServices(Request request, int model_id) {
return new Model(request.getDataFromWebServices(model_id));
}
final ModelData data;
Model(ModelData data) {
this.data = data;
}
}
我使用了原始的int
而不是Integer
,因为我想表明null
不是model_id
的有效值。
看起来这高度依赖于您的个人情况。
我个人可能会将构造函数设为私有,并公开一个名为“CreateModelFromService”的公共静态方法,以便向使用我的类的任何其他人明确表明由于网络连接等原因,该方法可能会失败的机会比正常情况更大。当实例化一个看似与网络无关的类时,我通常不会预期出现这样的错误。
仅代表个人意见。
class Model {
Model(ModelData data) { ... }
}
class ModelFactory {
private Request request;
Model create(Integer modelId) {
return new Model(request.getDataFromWebServices(modelId));
}
}
这取决于组件将在何处使用。大多数程序员希望构造函数能够快速完成,因此进行网络操作可能不是最佳选择。
在实例化时和稍后初始化都是有效的。真正的问题是你正在处理什么限制,什么可能会在某些时候失败,何时需要访问状态以及是否能够处理等待直到需要访问状态来计算状态的潜在延迟。除非你的情况需要另一种方法,否则两者都没有对错之分。