我有一个类(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() 吗?谁会调用它?
  • 10-06 05:05