我有一个类(class) (MiddleMan) 与系统对话,这个对话由 MiddleMan 的客户初始化。
如果“谈话”成功完成,MiddleMan 将生成一个 token 并将其返回给其客户端。
我目前的类(class)设计如下: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"); } }}
这对你来说合适吗?你会如何重构它?
最佳答案
amount
从哪里开始发挥作用。它不在实例变量列表中,也不在构造函数参数中。您需要在代码段中修复此问题以避免混淆。 talk()
方法不应验证,正如其名称所暗示的那样。 isTalkSuccessful()
中调用 getToken()
方法。我假设您希望客户端在调用 getToken()
之前检查这一点以避免异常。不是吗?并且您将检查到位,以防万一客户端不调用 isTalkSuccessful()
。正确的?所以,如果避免异常是重点,为什么不只是不抛出任何异常。让我们摆脱那个公共(public)方法 isTalkSuccessful()
并让客户端调用 getToken()
。在您的 getToken()
方法中检查私有(private)字段 isTalkSuccessful
,如果它是 false 则返回 null
。为什么不? setToken()
吗?谁会调用它?