Вопрос дизайна интерфейса класса Java - PullRequest
4 голосов
/ 22 ноября 2010

У меня класс (MiddleMan) говорит с системой, и этот разговор инициализируется клиентами MiddleMan.

Если «разговор» успешно завершен, MiddleMan сгенерирует токен и вернет его своему клиенту.

Дизайн класса, который у меня есть на данный момент, выглядит следующим образом:


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");
      }

     }



}

Это выглядит правильно для вас? Как бы вы его рефакторинг?

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010
  1. Откуда amount вступают в игру.Его нет в списке переменных экземпляра и в аргументе конструктора.Вы должны исправить это в своем фрагменте, чтобы избежать путаницы.
  2. Проверка параметров должна выполняться в конструкторе.Если параметры недопустимы, выведите соответствующее конструкторское исключение.talk() метод не должен проверяться, как предполагает его название.
  3. Я вижу, что вы вызываете isTalkSuccessful() метод в вашем getToken().Я предполагаю, что вы хотите, чтобы клиент проверил это перед вызовом getToken(), чтобы избежать исключения.Не так ли?И у вас есть чек на тот случай, если клиент не позвонит isTalkSuccessful().Правильный?Итак, если исключение - это весь вопрос, почему бы просто не выбросить исключение.Давайте избавимся от этого открытого метода isTalkSuccessful() и дадим клиенту вызвать getToken().В вашем методе getToken() проверьте приватное поле isTalkSuccessful и, если оно ложно, верните null.Почему бы и нет?
  4. Тебе действительно нужно setToken()?Кто его призовет?
0 голосов
/ 22 ноября 2010

Предполагая, что вы сначала вызываете talk (), а затем генерируете токен, вызывая getToken ():

Вам не нужно устанавливать переменную token? Он инициализируется нулевым значением и никогда не изменяется. Я полагаю, вам нужно установить token на то, что вы хотите в вашем методе talk (), после того, как вы успешно выполните вызов talkToSystem ().

О, а что здесь делает "сумма"?

this.amount = amount;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...