我有一个类 (MiddleMan) 与系统对话,这个对话由 MiddleMan 的客户初始化。
如果“对话”成功完成,MiddleMan 将生成一个 token 并将其返回给其客户端。
我现在的类设计如下:
class MiddleMan{
private String token = null;
private String param1;
private String param2;
private String amount;
boolean isTalkSuccessful = false;
public MiddleMan(String param1, String param2){
this.amount = amount;
this.param1 = param1;
this.param2 = param2;
}
public String talk() throws ValidationException{
//a private method validates param1 and param2
validateParameters();
//talk to backend system;
isTalkSuccessful = talkToSystem();
}
Private void validateParameters() throws ValidationException {
}
private boolen talkToSystem(){
}
public boolean isTalkSuccessful(){
return isTalkSuccessful;
}
public String getToken() throws Exception{
if(isTalkSuccessful()){
return token;
}else{
throw new Exception("cannot return token because talk is not successful");
}
}
}
这对你来说合适吗?你会如何重构它?
最佳答案
数量
发挥作用的地方。它不在实例变量列表中,也不在构造函数参数中。您需要在代码段中修复此问题以避免混淆。- 参数的验证应该在构造函数中完成。如果参数无效,则从构造函数中抛出一些适当的异常。
talk()
方法不应验证,正如其名称所暗示的那样。 - 我可以看到您正在调用
getToken()
中的isTalkSuccessful()
方法。我假设您希望客户端在调用getToken()
之前检查它以避免异常。不是吗?并且您已准备好检查以防万一客户端未调用isTalkSuccessful()
。正确的?所以,如果避免异常是重点,为什么不抛出任何异常呢?让我们去掉那个公共(public)方法isTalkSuccessful()
并让客户端调用getToken()
。在您的getToken()
方法中,检查私有(private)字段isTalkSuccessful
,如果为假,则返回null
。为什么不呢? - 你真的需要
setToken()
吗?谁将调用它?
关于Java类接口(interface)设计题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241573/